もうすぐです...実際、コードはそこにあります。使用してみましょう!
:- use_module(library(clpfd)).
実行dd//1
すると、次のphrase/2
ようになります。
?- C #>= 3, phrase(dd(C), Xs).
C = 3, Xs = [0,0,0]
; C = 4, Xs = [0,0,0,0]
; C = 5, Xs = [0,0,0,0,0]
; C = 6, Xs = [0,0,0,0,0,0]
; C = 7, Xs = [0,0,0,0,0,0,0]
; C = 8, Xs = [0,0,0,0,0,0,0,0]
; C = 9, Xs = [0,0,0,0,0,0,0,0,0]
...
を含むシーケンスはどこにあります1
か? 私たちはそれらが存在しなければならないことを知っています...
?- Xs = [0,0,0,1,0], C #>= 3, フレーズ(dd(C), Xs).
Xs = [0,0,0,1,0]、C = 3
; 間違い。
...しかし、それらは上記の回答シーケンスには表示されません。
?- C #>= 3, 句(dd(C), Xs), Xs = [0,0,0,1,0].
**ループ**
length/2
ソリューション セットの公平な列挙を強制するために、次のような目標を使用できます。
?- C #>= 3、長さ(Xs, _)、語句 (dd(C), Xs)。
C = 3、Xs = [0,0,0]
; C = 4、Xs = [0,0,0,0]
; C = 5、Xs = [0,0,0,0,0]
; C = 3、Xs = [0,0,0,0,1]
; C = 3、Xs = [0,0,0,1,0]
; C = 3、Xs = [0,0,1,0,0]
; C = 3、Xs = [0,1,0,0,0]
; C = 3、Xs = [1,0,0,0,0]
; C = 6、Xs = [0,0,0,0,0,0]
...