Procedures¶

A sequence of statements can be wrapped into a named entity called a procedure. In addition, a procedure may accept an argument. The accepting variable is called a parameter.

Type¶

The type of a procedure with parameter type T is written

T -> 0


A procedure is a subroutine, it returns control, but it does not return a value. To be useful, a procedure must change the state of the program or its environment. This is called an effect.

Procedures in Felix are first class and can be used as values.

Definition¶

A procedure is defined like this:

proc doit (x:int) {
println$x; x = x + 1; println$ x;
}


A procedure may explicitly return control when it is finished.

proc maybedoit (x:int) {
if x > 0 do
println$x; return; done x = -x; println$ x;
}


If the procedure does not have a return statement at the end, one is implicitly inserted.

A procedure can have a unit argument:

proc hello () {
}
call hello ();
hello ();
hello;