3

请看这段代码被剪断:

...,
findall(X, predicate(Input1, X), XS),
XS \== [],
!,
member(X, XS),
...

这将找到 in 的所有解决方案predicate(_, X)XScut,然后在 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
4

1 回答 1

2

这个怎么样:

predicate(Input1,X), !, (Y=X ; predicate(Input1,Y), Y \= X).

我认为这与软切非常相似(不是说完全一样)predicate(Input1,X) *-> ...。它也CONDa来自“理性的计划者”一书。我认为。

实际上,这与您想要的并不完全相同。我认为以下更接近:

predicate(Input1,_), !, predicate(Input1,X).
于 2013-04-26T16:44:13.757 回答