Поиск…


call / N предикаты

Семейство предикатов call/N может вызывать произвольные цели Prolog во время выполнения:

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

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

MapList / [2,3]

maplist/2 и maplist/3 - это предикаты более высокого порядка, которые позволяют отнести определение предиката об одном элементе к спискам таких элементов. Эти предикаты могут быть определены с помощью call/2 и call/3 качестве строительных блоков и отправлены со многими системами Prolog.

Например:

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

Мета-вызов

В Prolog так называемый мета-вызов - это встроенная функция языка. Весь код Prolog представлен терминами Prolog, позволяющий строить цели динамически и использоваться как другие цели без дополнительных предикатов:

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

Используя этот механизм, другие предикаты более высокого порядка могут быть определены в самом Прологе.

foldl / 4

Справа (слева) представляет собой соотношение более высокого порядка между:

  • предикат с тремя аргументами
  • список элементов
  • начальное состояние
  • конечное состояние, которое является результатом применения предиката к последующим элементам при прохождении промежуточных состояний.

Например: Используйте foldl/4 чтобы выразить сумму всех элементов в списке, используя предикат как строительный блок для определения суммы двух элементов:

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

Вызов списка целей

Чтобы вызвать список целей, как если бы это было соединение целей, объедините предикаты высшего порядка call / 1 и 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
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow