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.


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow