我写下代码
testb :-
X::1..10,
V1 = 3,
V2 = 6,
testbb(X,V1,V2),
writeln(X).
testbb(X,V1,V2) :-
(
count(I,V1,V2),param(X,V1,V2) do
X#\=I
).
?- testb.
Yes (0.00s cpu)
_385{[1, 2, 7 .. 10]}
效果很好,但我觉得效率不高
非常感谢:)
答案 0 :(得分:2)
您可以将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)).
将testbb/3
替换为not_between/3
。此定义可确保X
无法准确显示Lower
和Upper
值;如果您希望将它们包含在#<
的域中,则可以使用范围约束#>
和X
。
这是经过测试并与SWI-Prolog合作。要在SWI-Prolog文件中使用CLP(FD),请确保在指令中导入源文件顶部的CLP(FD)库,如下所示:
:- use_module(library(clpfd)).