Я новичок в прологе и просто не могу понять это.
Я пытаюсь создать простую программу, которая получает список предикатов, ищет определенный предикат в списке и применяет функцию к параметрам этого предиката.
Что-то в этом роде:
?- program([pred1(a,b,p), pred2(d,b,p), pred2 (a,c,p)]).
program (list1) :-
search(pred2(X,Y,p),list1).
doSomething (X,Y) % with the X and Y returned from search function, both of them.
По сути, я хочу использовать все значения, которые будут возвращаться из цели search(pred2(X,Y,p),list1)
, и использовать их в другой функции.
Хорошо, я попробовал кое-что в прологе и пришел к этому:
member(X, [X | _]).
member(X, [_ | R]) :- member(X, R).
prog(L1,Out) :- member(pred2(X,Y), L1).
?- prog ([(pred1(a,b),pred2(c,b),pred2(d,a)],Out).
Это дает истину в 2 раза, как положено, но я хотел получить Out = [c,b]
и Out = [d,a]
. Как мне этого добиться?
Относительно ответа Оака: я понял, что это не процедурный язык, но я не могу понять, как получить доступ к значениям и использовать их в прологе. Ваш пример не был таким полезным.