如何解决如何写好谓词不在两者之间
| 我写下面的代码testb :-
X::1..10,V1 = 3,V2 = 6,testbb(X,V1,V2),writeln(X).
testbb(X,V2) :-
(
count(I,param(X,V2) do
X#\\=I
).
?- testb.
Yes (0.00s cpu)
_385{[1,2,7 .. 10]}
它运作良好,但我认为效率不高
非常感谢 :)
解决方法
您可以通过以下方式将
X
的域限制在V1
到V2
的范围之外:
not_between(X,Lower,Upper) :-
% it is not the case that X is both greater and
% equal to Lower,and less than or equal to Upper:
#\\ ((X #>= Lower) #/\\ (X #=< Upper)).
用not_between/3
替换testbb/3
。此定义确保X
不能完全取Lower
和Upper
的值;如果希望将它们包含在X
的域中,则可以改用范围约束#<
和#>
。
这已经过测试,并且可以与SWI-Prolog一起使用。要在SWI-Prolog文件中使用CLP(FD),请确保在指令中将CLP(FD)库导入源文件顶部,如下所示:
:- use_module(library(clpfd)).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。