Beispiel: gegeben sei der Term x*x + y*y. Damit können wir zwei verschiedene Funktionen bilden:
xaber auchf1(x) = x*x + y*y,
f1(a) = a*a + y*y
yDafür kann man auch schreiben:f2(y) = x*x + y*y,
f2(a) = x*x + a*a
f1 =Der durch eine solche Lambda-Angabe gebundene Bezeichner für den Parameter kann innerhalb seines Gültigkeitsbereichs (hier: die Funktionsdefinition) überall durch einen anderen Bezeichner ersetzt werden, solange dadurch keine Kollisionen entstehen; dadurch ändert sich die Bedeutung nicht.x . (x*x + y*y),
f2 =
y . (x*x + y*y)
In Programmiersprachen werden Funktionen durch Funktionsprozeduren vertreten, den Lambda-Angaben entspricht die Parameterliste. In Modula 2 sind bei den Parametern und beim Ergebnis jeweils noch die Datentypen anzugeben; damit sieht eine Funktionsvereinbarung beispielsweise für die Funktion f2 folgendermaßen aus:
Sogar die Anwendung von Funktionen, die keinen Namen tragen, sondern die nur durch einen Term gegeben sind, auf ein Argument läßt sich so anschreiben (zur Klarheit setzen wir Klammern):PROCEDURE f2(y: REAL): REAL; BEGIN RETURN x*x + y*y END f2;
(Das ist dann interessant, wenn sich der Term selbst erst durch eine Berechnung ergibt, etwa die Bildung der Ableitung beim symbolischen Rechnen.x . (x*x + y*y))(a) = a*a + y*y
Es müssen übrigens nicht nur Veränderliche sein,
die durch eine Lambda-Angabe markiert
und bei der Funktionsanwendung ersetzt werden;
läßt man hier auch Funktionsbezeichner zu,
so kommt man zu den sogenannten
höheren Funktionen;
manche davon sind uns bereits wohlbekannt!