Solche Operationen sind schon vom Gymnasium her bekannt, werden aber dort meist nicht als Funktionen aufgefaßt.
Beispiel: die Differentiation
D: [Rüberführt eine reelle (differenzierbare) Funktion f in ihre Ableitungsfunktion D(f) = f'. Das kann geschrieben werden:R]
[R
R]
D =f . f'
oder deutlicher
D =
f . (
x . f'(x))
Ein bestimmtes Integral auf einem festen Intervall (a,b)
überführt eine reelle Funktion f in einen reellen Wert ,
ist also vom Typ [R R]
R
und kann geschrieben werden:
I =f .
f(t) dt
Das Bilden einer Stammfunktion macht dagegen
aus einer reellen Funktion
wieder eine reelle Funktion , ist also vom gleichen Typ
[R R]
[R
R]
wie die Differentiation.
Wir bekommen die Stammfunktion, indem wir das bestimmte Integral
von der oberen Grenze abhängen lassen,
das geht mit der Lambda-Notation (und nur mit ihr) sehr bequem:
S =f . (
b .
f(t) dt)
Die Operation: Auswertung einer beliebigen reellen Funktion f
an einer gegebenen festen reellen Stelle a ist vom gleichen Typ
[R R]
R
wie das Bilden des bestimmten Integrals
und kann geschrieben werden:
A =f . f(a)
im Gegensatz zur Funktion f selbst:
f =
x . f(x)
Modula 2 ist (neben LISP) eine der wenigen Programmiersprachen, in denen sich höhere Funktionen bequem programmieren lassen, da es hier auch Prozedur-Typen gibt.