Functions can be declared alongside other declarations. The syntax for functions is defined by the grammar for Function:

Function        ::= [Type] [ID] '(' [Parameters] ')' Block 
Block	        ::= '{' [Declarations] Statement* '}'
Statement       ::= Block
                 | ';'
                 |  [Expression] ';'
                 |  ForLoop
                 |  Iteration
                 |  WhileLoop 
                 |  DoWhileLoop 
                 |  IfStatement 
                 |  ReturnStatement

ForLoop	        ::= 'for' '(' [Expression] ';' [Expression] ';' [Expression] ')' Statement 
Iteration	    ::= 'for' '(' [ID] ':' [Type] ')' Statement
WhileLoop       ::= 'while' '(' [Expression] ')' Statement
DoWhile         ::= 'do' Statement 'while' '(' [Expression] ')' ';'
IfStatment      ::= 'if' '(' [Expression] ')' Statement [ 'else' Statement ]
ReturnStatement ::= 'return' [ [Expression] ] ';'


The keyword for has two uses: One is a C/C++/Java like for-loop, and the other is a Java like iterator. The latter is primarily used to iterate over arrays indexed by scalars.

A statement for (ID : Type) Statement will execute Statement once for each value ID of the type Type. The scope of ID is the inner expression Expr, and Type must be a bounded integer or a scalar set.



The following function returns the sum of two integers. The arguments are call by value.

int add(int a, int b)
    return a + b; 


The following procedure swaps the values of two call-by-reference integer parameters.

void swap(int &a, int &b) 
  int c = a;
  a = b;
  b = c;


The following procedure initializes an array such that each element contains its index in the array. Notice that the an array parameter is a call-by-value parameter unless an ampersand is used in the declaration. This is different from C++ syntax, where the parameter could be considered an array of references to integer.

void initialize(int& a[10])
  for (i : int[0,9]) 
    a[i] = i;