首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在prolog中防止统一

如何在prolog中防止统一
EN

Stack Overflow用户
提问于 2020-05-02 18:10:35
回答 1查看 107关注 0票数 0

我有一个谓词可以生成这样的子列表,

代码语言:javascript
复制
?- f([1,2,3,#,5,6,7,8,#,10,11,12],L).

L = [1,2,3];

L=[5,6,7,8];

L=[10,11,12];

false.

当我使用变量而不是常量来调用它时,它们与#统一在一起,破坏了输出,并阻止了它们以后的统一。我如何才能阻止变量与#统一,像这样?

EN

回答 1

Stack Overflow用户

发布于 2020-05-02 18:35:45

停止变量与#的统一

只有当您的Prolog支持dif/2 (SWI-Prolog支持)时,这才是可用的常规方法。

代码语言:javascript
复制
?- f(..., L), maplist(dif(#), L).

当然,在您的代码中可能有更好的位置来放置dif/2调用,或者您可以使用标准ISO操作符(\==)/2来避免统一。这种策略是否可行,最大程度上取决于你的代码。一般来说,从效率的角度来看,当我们给他们一个机会尽快限制搜索空间时,约束会起到更好的作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61557633

复制
相关文章

相似问题

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