Solche Operationen sind schon vom Gymnasium her bekannt, werden aber dort meist nicht als Funktionen aufgefaßt.
Beispiel: die Differentiation
D: [R R] [R R]überführt eine reelle (differenzierbare) Funktion f in ihre Ableitungsfunktion D(f) = f'. Das kann geschrieben werden:
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.