我正在尝试生成三个元素列表的所有可能组合,其中所有元素都是不同的。我正在使用CLPFD库来定义变量的域。
我定义了以下内容
listDif(F,X):-F ins 1..3,findall(F,all_distinct(F),X).
查询的答案是
?- listDif([1,_,2],X).
X = [[1, 3, 2]].
?- listDif([1,_,_],X).
X = [[1, _7374, _7380]],
_7374 in 2..3,
all_distinct([1, _7374, _7380]),
_7380 in 2..3.
?-
如何显示带有可能整数值的列表?
答案 0 :(得分:1)
如果要使用CLPFD生成列表,则需要使用列表。 :)你的代码只是使用个别整数。
list3(F) :-
length(F, 3), % F is a list of length 3
F ins 1..3, % Elements of F are in the range 1..3
all_distinct(F). % F has distinct elements
现在,您有一个谓词,该谓词对包含1,2,3:
的唯一列表成功?- list3(F), label(F).
F = [1, 2, 3] ;
F = [1, 3, 2] ;
F = [2, 1, 3] ;
F = [2, 3, 1] ;
F = [3, 1, 2] ;
F = [3, 2, 1].
如果您想要列出所有这些列表,可以使用findall/3
:
?- findall(F, (list3(F), label(F)), AllList3).
AllList3 = [[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]].