Beispiel: gegeben sei der Term x*x + y*y. Damit können wir zwei verschiedene Funktionen bilden:
x f1(x) = x*x + y*y, f1(a) = a*a + y*yaber auch
y f2(y) = x*x + y*y, f2(a) = x*x + a*aDafür kann man auch schreiben:
f1 = x . (x*x + y*y), f2 = y . (x*x + y*y)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.
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;
(x . (x*x + y*y))(a) = a*a + y*yDas ist dann interessant, wenn sich der Term selbst erst durch eine Berechnung ergibt, etwa die Bildung der Ableitung beim symbolischen Rechnen.
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!