如何防止prolog中的统一

问题描述 投票:0回答:1

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

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

当我用变量而不是常量来调用它时,它们就会与#统一起来,破坏输出,并阻止它们以后统一起来。我怎样才能阻止变量和#统一起来呢?

prolog swi-prolog
1个回答
0
投票

停止变量与#的统一

这是一般的方法,只有当你的Prolog支持dif2时才可以使用(SWI-Prolog支持),当然在你的代码中可以有一些更好的地方放置dif2调用,或者你可以使用标准的ISO运算符(\==)2来避免统一。

?- f(..., L), maplist(dif(#), L).

当然,在你的代码中可以有更好的地方来放置dif2调用,或者你可以使用标准的ISO操作符(\==)2来避免统一。这样的策略是否可行,主要取决于你的代码。一般来说,当我们给约束条件限制搜索空间的机会时,从效率的角度来看,约束条件的效果会更好。尽快.

© www.soinside.com 2019 - 2024. All rights reserved.