2017-04-15 4 views
1

3つの要素のすべての可能な組み合わせをすべて生成しようとしていますが、すべてが異なる場合です。私は変数のドメインを定義するためにCLPFDライブラリを使用しています。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. 

?- 
ですか?定義されましたか

答えて

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]]. 
+0

私は間違いを理解していますので、非常に@lurkerありがとう!ご挨拶 – MLStud

関連する問題