为了编写满足(P,L)的过程,其返回所有项X的列表L,使得一元谓词P(X)成功。我尝试了以下方法:
satisfy(P,L):- findall(X,call(P(X)),L).
我是在正确的轨道还是完全离开了?
答案 0 :(得分:2)
不完全。您使用findall/3
走在正确的轨道上,但您无法通过简单地声明P(X)
来构建目标。您需要使用=../2
构建术语。
答案 1 :(得分:2)
您可以使用内置谓词调用/ 2来执行此操作:
satisfy(P, L):- findall(X, call(P, X), L).