Functions

rascal-0.33.7

Synopsis​

Functions and pattern-directed invocation.

Description​

Functions allow the definition of frequently used operations. They have a name and formal parameters. They are explicitly declared and are fully typed. Functions can also be used as values thus enabling higher-order functions. Rascal is a higher-order language in which functions are first-class values.

See Function Declaration for details.

Examples​

Here is an example of a function that counts the number of assignment statements in a program:

``int countAssignments(PROGRAM P){    int n = 0;    visit (P){    case asgStat(_, _):         n += 1;    }    return n;}``

Consider the following use of higher-order functions:

``int double(int x) { return 2 * x; }int triple(int x) { return 3 * x; }int f(int x, int (int) multi){ return multi(x); }``

The functions `double` and `triple` multiply their argument with a constant. Function `f` is, however, more interesting. It takes an integer `x` and a function `multi` (with integer argument and integer result) as argument and applies multi to its own argument. `f(5, triple)` will hence return `15`. Function values can also be created anonymously as illustrated by the following, alternative, manner of writing this same call to `f`:

``f(5, int (int y){return 3 * y;});``

Here the second argument of `f` is an anonymous function.