请看这段代码剪掉:
...,
findall(X, predicate(Input1, X), XS),
XS \== [],
!,
member(X, XS),
...
这将在predicate(_, X)
中找到XS
的所有解,然后在XS中对X进行“迭代”。
可以在这里替换findall/3
吗?我很可能不会对所有 X解决方案感兴趣。我需要知道它对Input1是否可以满足,如果是,请继续使用它的解决方案。
请注意,这当然不是我想要的:
predicate(Input1, X), % Uses other values for Input1
这两个都不是:
!, predicate(Input1, X), % I could need another value for Input1
特别是不是这个:
predicate(Input1, X), !, % I want further solutions for X
答案 0 :(得分:2)
这个怎么样:
predicate(Input1,X), !, (Y=X ; predicate(Input1,Y), Y \= X).
我认为这与软切割predicate(Input1,X) *-> ...
非常相似(不完全相同)。它也是CONDa
from the "Reasoned Schemer" book。我想。
实际上,这与你想要的并不完全相同。以下是更接近的,我认为:
predicate(Input1,_), !, predicate(Input1,X).