Prolog Language
Программирование более высокого порядка
Поиск…
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.