如果可以满足,之前减少,否则失败

时间:2013-04-26 15:49:58

标签: prolog

请看这段代码剪掉:

...,
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

1 个答案:

答案 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).