3

我正在尝试为global_cardinality我的程序添加一个约束,并且在SICStus Prolog 的手册中写道:

global_cardinality(+Xs,+Vals)

global_cardinality(+Xs,+Vals,+Options)

其中 Xs = [X1,...,Xd] 是整数或域变量的列表,Vals = [K1-V1,...,Kn-Vn] 是对的列表,其中每个键 Ki 都是唯一的整数Vi 是域变量或整数。如果 Xs 的每个元素都等于某个键,并且对于每对 Ki-Vi,则 Xs 的 Vi 元素恰好等于 Ki。

现在我可以写:

global_cardinality([A,B,C], [1-2, 2-1]).

说这个号码1会被使用两次。该号码2将只使用一次。

但我想说的是,1将使用该数字:once, twice or three times

根据手册,我需要一个域变量,但正确的语法是什么?

4

2 回答 2

5
?- X in 1..3, global_cardinality([A,B,C], [1-X, 2-1]).
于 2013-05-06T15:28:46.617 回答
1

对此不确定,但我认为您可以从 SWI-Prolog页面尝试

...global_cardinality([A,B,C], [1-X, 2-1]), (X #= 1 #\/ X #= 2 #\/ X #= 2)...

或者

?- global_cardinality([A,B,C], [1-X, 2-1]), X in 1..3, label([A,B,C]).
A = B, B = 1,
C = X, X = 2 ;
A = C, C = 1,
B = X, X = 2 ;
A = X, X = 2,
B = C, C = 1.
于 2013-05-06T14:03:56.227 回答