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.


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow