maplist с параметризованным предикатом
Можно ли использовать параметризованный предикат в mapList
?
Например, я хотел бы сделать следующее: по списку, и для каждого четного элемента (список содержит только числа) сопоставить этот элемент с некоторым значением (это значение задается параметром предиката).
Примеры запросов:
?- mapList(p(red, blue), [1,2,3,4], [red, blue, red, blue]).
true.
?- mapList(p(green, blue), [1,2,3,4], [green, blue, green, blue]).
true.
1 ответ
Решение
Да, предикат просто получит все дополнительные параметры. После определения p/4, запустим ваши запросы (как только mapList будет исправлен в maplist):
?- [user].
p(C1,C2,N,C) :- 0 =:= N mod 2 -> C = C2 ; C = C1.
(^D here)
?- maplist(p(red, blue), [1,2,3,4], L).
L = [red, blue, red, blue].