使用nvalue(N, X)
and then constrain N
to be greater than 1 ( N #> 1
) 将要求应该有 2 或 3 个不同的值。
例子:
:-lib(ic).
:-lib(ic_search).
:-lib(ic_global).
go :-
Len = 3,
dim(X,[Len]),
X :: 1..Len,
N :: 1..Len,
nvalue(N,X),
N #> 1,
term_variables([X],Vars),
search(Vars,0,first_fail,indomain,complete,[]),
writeln([n:N, x:X]),
fail.
该模型给出了以下解决方案:
[n : 2, x : [](1, 1, 2)]
[n : 2, x : [](1, 1, 3)]
[n : 2, x : [](1, 2, 1)]
[n : 2, x : [](1, 2, 2)]
[n : 3, x : [](1, 2, 3)]
[n : 2, x : [](1, 3, 1)]
[n : 3, x : [](1, 3, 2)]
[n : 2, x : [](1, 3, 3)]
[n : 2, x : [](2, 1, 1)]
[n : 2, x : [](2, 1, 2)]
[n : 3, x : [](2, 1, 3)]
[n : 2, x : [](2, 2, 1)]
[n : 2, x : [](2, 2, 3)]
[n : 3, x : [](2, 3, 1)]
[n : 2, x : [](2, 3, 2)]
[n : 2, x : [](2, 3, 3)]
[n : 2, x : [](3, 1, 1)]
[n : 3, x : [](3, 1, 2)]
[n : 2, x : [](3, 1, 3)]
[n : 3, x : [](3, 2, 1)]
[n : 2, x : [](3, 2, 2)]
[n : 2, x : [](3, 2, 3)]
[n : 2, x : [](3, 3, 1)]
[n : 2, x : [](3, 3, 2)]