Ricerca…


call / N predicates

La famiglia di predicati call/N può chiamare obiettivi Prolog arbitrari in fase di esecuzione:

?- G=true, call(G).
true.

?- G=(true,false), call(G).
false.

maplist / [2,3]

maplist/2 e maplist/3 sono predicati di ordine superiore, che consentono di maplist/3 la definizione di un predicato su un singolo elemento per gli elenchi di tali elementi. Questi predicati possono essere definiti usando call/2 e call/3 come elementi costitutivi e spediti con molti sistemi Prolog.

Per esempio:

?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).

Meta-chiamata

In Prolog, la cosiddetta meta-call è una funzione di linguaggio incorporata. Tutto il codice Prolog è rappresentato dai termini Prolog, che consente di costruire gli obiettivi in ​​modo dinamico e di essere utilizzati come altri obiettivi senza ulteriori predicati:

?- Goal = dif(X, Y), Goal.
dif(X, Y).

Utilizzando questo meccanismo, altri predicati di ordine superiore possono essere definiti in Prolog stesso.

foldl / 4

Una piega (da sinistra) è una relazione di ordine superiore tra:

  • un predicato con 3 argomenti
  • un elenco di elementi
  • uno stato iniziale
  • uno stato finale, che è il risultato dell'applicazione del predicato a elementi successivi mentre trasporta stati intermedi.

Ad esempio: utilizzare foldl/4 per esprimere la somma di tutti gli elementi in un elenco, utilizzando un predicato come blocco predefinito per definire la somma di due elementi:

?- foldl(plus, [2,3,4], 0, S).
S = 9.

Chiama una lista di obiettivi

Per chiamare un elenco di obiettivi come se fosse una combinazione di obiettivi, combinare la chiamata ai predicati di ordine superiore / 1 e la lista di mappe / 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow