Prolog Language
Programmierung höherer Ordnung
Suche…
call / N Prädikate
Die call/N
Familie von Prädikaten kann zur Laufzeit beliebige Prolog-Ziele aufrufen:
?- G=true, call(G).
true.
?- G=(true,false), call(G).
false.
Kartenliste / [2,3]
maplist/2
und maplist/3
sind Prädikate höherer Ordnung, mit denen die Definition eines Prädikats um ein einzelnes Element auf Listen solcher Elemente angehoben werden kann. Diese Prädikate können mit call/2
und call/3
als Bausteine definiert werden und werden mit vielen Prolog-Systemen ausgeliefert.
Zum Beispiel:
?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).
Meta-Anruf
In Prolog ist der sogenannte Meta-Aufruf eine integrierte Sprachfunktion. Der gesamte Prolog-Code wird durch Prolog- Ausdrücke dargestellt , sodass Ziele dynamisch erstellt und wie andere Ziele ohne zusätzliche Prädikate verwendet werden können:
?- Goal = dif(X, Y), Goal.
dif(X, Y).
Mit diesem Mechanismus können andere Prädikate höherer Ordnung in Prolog selbst definiert werden.
falten / 4
Eine Falte (von links) ist eine Beziehung höherer Ordnung zwischen:
- ein Prädikat mit 3 Argumenten
- eine Liste von Elementen
- ein Ausgangszustand
- ein Endzustand, der das Ergebnis der Anwendung des Prädikats auf aufeinanderfolgende Elemente ist, während Zwischenzustände durchlaufen werden.
Beispiel: Verwenden Sie foldl/4
, um die Summe aller Elemente in einer Liste auszudrücken. Verwenden Sie ein Prädikat als Baustein, um die Summe zweier Elemente zu definieren:
?- foldl(plus, [2,3,4], 0, S).
S = 9.
Rufen Sie eine Liste mit Zielen auf
Um eine Liste von Zielen als eine Kombination von Zielen aufzurufen, kombinieren Sie die Prädikate call / 1 höherer Ordnung und maplist / 2:
?- Gs = [X = a, Y = b], maplist(call, Gs). Gs = [a=a, b=b], X = a, Y = b.