Prolog Language
Programmazione di ordine superiore
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.