|
closure |
Closures are one of the most powerful tools that one desires of a programming language. They provide the ground for higher order functional programming.
package closure;
import basic;
import array;
// a function mapping an operation element-wise over a sequence
function map( sequence, oper )
{
local result = #[];
local el;
for (el in sequence)
array.push( result, oper( el ) );
return result;
}
/*
* return the sequence obtained by applying the
* exponentiation operator (x**y) to each element
*/
function pow( sequence, y )
{
/*
* We pass a closure referencing our argument y
* as the operation.
*/
return map( sequence,
function( x )
{
return x ** y;
} );
}
private aSeq = #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
private squareSeq = pow( aSeq, 2 );
private cubeSeq = pow( aSeq, 3 );
basic.print( "Original sequence: ", aSeq, "\n" );
basic.print( "sequence ** 2 : ", squareSeq, "\n" );
basic.print( "sequence ** 3 : ", cubeSeq, "\n" );