2012-01-25 5 views
0

Чтобы написать процедуру, удовлетворяющую (P, L), которая возвращает список L всех членов X, так что унарный предикат P (X) завершается успешно. Я попытался выполнить следующие действия:Удовлетворение предиката унарного пролога

satisfy(P,L):- findall(X,call(P(X)),L). 

Я нахожусь на правильном пути, или я совсем ушел?

ответ

2

Вы можете сделать это с помощью встроенной предикат вызова/2:

satisfy(P, L):- findall(X, call(P, X), L). 
2

Не совсем. Вы на правильном пути, используя findall/3, но вы не можете построить цель для звонка, просто указав P(X). Вы должны построить термин, используя вместо этого =../2.