Prolog Language
Programowanie wyższego rzędu
Szukaj…
predykaty połączenia / N
Rodzina predykatów call/N
może wywoływać dowolne cele Prolog w czasie wykonywania:
?- G=true, call(G).
true.
?- G=(true,false), call(G).
false.
maplist / [2,3]
maplist/2
i maplist/3
są predykatami wyższego rzędu, które umożliwiają podniesienie definicji predykatu wokół jednego elementu do list takich elementów. Predykaty te można zdefiniować za pomocą call/2
i call/3
jako elementów składowych i dostarczanych z wieloma systemami Prolog.
Na przykład:
?- maplist(dif(a), [X,Y,Z]).
dif(X, a),
dif(Y, a),
dif(Z, a).
Meta-call
W Prologu tak zwane meta-call jest wbudowaną funkcją języka. Cały kod Prolog jest reprezentowany przez terminy Prolog, umożliwiając dynamiczne konstruowanie celów i używanie ich jak innych celów bez dodatkowych predykatów:
?- Goal = dif(X, Y), Goal.
dif(X, Y).
Za pomocą tego mechanizmu można zdefiniować inne predykaty wyższego rzędu w samym Prologu.
foldl / 4
Fold (od lewej) to relacja wyższego rzędu między:
- predykat z 3 argumentami
- lista elementów
- stan początkowy
- stan końcowy, który jest wynikiem zastosowania predykatu do kolejnych elementów podczas przenoszenia przez stany pośrednie.
Na przykład: użyj foldl/4
aby wyrazić sumę wszystkich elementów na liście, używając predykatu jako bloku konstrukcyjnego do zdefiniowania sumy dwóch elementów:
?- foldl(plus, [2,3,4], 0, S).
S = 9.
Zadzwoń do listy celów
Aby wywołać listę celów tak, jakby była kombinacją celów, połącz predykaty wyższego rzędu call / 1 i maplist / 2:
?- Gs = [X = a, Y = b], maplist(call, Gs). Gs = [a=a, b=b], X = a, Y = b.