首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果可以满足,先切,否则失败

如果可以满足,先切,否则失败
EN

Stack Overflow用户
提问于 2013-04-26 15:49:57
回答 1查看 100关注 0票数 3

请看到下面的代码片段:

代码语言:javascript
复制
...,
findall(X, predicate(Input1, X), XS),
XS \== [],
!,
member(X, XS),
...

它将在predicate(_, X)中找到XS的所有解决方案,然后在XS中的X上进行“迭代”。

这里有可能取代findall/3吗?很可能我不会对X的所有解决方案感兴趣,我需要知道它对于Input1是否可以满足,如果是的话,继续它的解决方案。

请注意,这当然不是我想要的:

代码语言:javascript
复制
predicate(Input1, X),     % Uses other values for Input1

这也不是:

代码语言:javascript
复制
!, predicate(Input1, X),  % I could need another value for Input1

(尤指)不是这样的:

代码语言:javascript
复制
predicate(Input1, X), !,  % I want further solutions for X
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-26 16:44:13

这个怎么样:

代码语言:javascript
复制
predicate(Input1,X), !, (Y=X ; predicate(Input1,Y), Y \= X).

我认为这是非常相似的(并不是说,完全相同)软切割,predicate(Input1,X) *-> ...。它也是 from the "Reasoned Schemer" book。我认为。

实际上,这和你想要的不完全一样。我认为更接近以下几点:

代码语言:javascript
复制
predicate(Input1,_), !, predicate(Input1,X).
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16240456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档