Functies als resultaat van functies

Dit is een van de meer gesofisticeerde concepten uit het paradigma van het functioneel programmeren. Een voorbeeld maakt duidelijk wat er bedoeld wordt.

> toyProc := proc(n::integer)
local x;
x -> x^n;
end:

Nu kan men met behulp van 'toyProc' functies definieren:

> f3 := toyProc(3);

[Maple Math]

> f5 := toyProc(5);

[Maple Math]

> f3(2);

[Maple Math]

> f5(2);

[Maple Math]

'f3' en 'f5' worden ook wel closures genoemd.

> toyProc := 'toyProc': f3 := 'f3': f5 := 'f5':

Een nuttiger voorbeeld wordt hieronder gegeven:

> kernelInt := proc(kernel::procedure)
proc(f::procedure)
local x;
int(f(x)*kernel(x),x);
end:
end:

> gaussInt := kernelInt(x -> exp(-x^2/2)/sqrt(2*Pi));

[Maple Math]

> gaussInt(x -> x^2);

[Maple Math]

> gaussInt(`sin`);

[Maple Math]

> polyInt := kernelInt(x -> a*x^2 + b*x + c);

[Maple Math]

> polyInt(x -> x);

[Maple Math]

> polyInt(proc(x) 1 end);

[Maple Math]

> kernelInt := 'kernelInt': gaussInt := 'gaussInt': polyInt := 'polyInt':