我试图在我的程序中添加一个约束global_cardinality,并在SICStus Prolog手册中编写:
global_cardinality(+Xs +Vals) global_cardinality(+Xs,+Vals,+选项) 其中,Xs = X1,.,Xd是整数或域变量的列表,Vals = K1-V1,.,Kn是一对的列表,其中每个键Ki是唯一的整数,Vi是域变量或整数。如果Xs的每个元素都等于某个键,对于每对Ki,则Xs的Vi元素完全等于Ki。
现在我可以写了:
global_cardinality([A,B,C], [1-2, 2-1]).要说数字1将被使用两次。数字2只使用一次。
但是我想说的是,1这个数字将被使用:once, twice or three times
根据手册,我需要一个域变量,但是正确的语法是什么呢?
发布于 2013-05-06 14:03:56
不确定,但是从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-06 15:28:46
?- X in 1..3, global_cardinality([A,B,C], [1-X, 2-1]).https://stackoverflow.com/questions/16399792
复制相似问题