2016-12-29 10 views
1

ドミノ・ピースのセットを指定して、すべての可能な終了をゲームに戻すアルゴリズムが必要です。プロローグ・ドミノ・ソリューション

私はすでにこの1つを見つけましたが、Prolog domino gameですが、セットの先頭にピースが追加されるだけで、すべての解決策が得られるわけではありません。

この[5-4, 4-3, 3-2, 2-1]をこの[[5,4], [4,3], [3,2], [2,1]]に置き換えて、この行を追加しようとしましたが、この行を追加しようとしましたが動作しません。

答えて

1

詳細なロジックを書き留めていくと、やや複雑なコードになります。 代わりに、有効性の確認をして、Prologに挿入ポイントを割り当てさせることをお勧めします。

domino :- 
    Spare = [4-7,3-4], Curr = [1-2,2-3], 
    domino_row_add_spare(Curr, Spare, R), 
    writeln(R). 

domino_row_add_spare(C, [], C). 
domino_row_add_spare(C, Sps, U) :- 
    append(L, R, C), 
    select(X-Y, Sps, Rest), 
    (append(L, [X-Y|R], C1) ; append(L, [Y-X|R], C1)), 
    valid(C1), 
    domino_row_add_spare(C1, Rest, U). 

valid([_]). 
valid([_-X,X-Y|R]) :- valid([X-Y|R]). 
+0

非常に良いプログラム! 'domino(R): - ...'と書いておけば、多目的にすることができます。 – mat

+0

'Spare'と' Curr'のリストの目的は何ですか?私がその要素を変えるたびに、それは私にすべての解決策を与えないか、それらすべてを与えますが、繰り返します。 –

+0

@MiguelAndrade:パラメータに説明的な名前をつけるだけです。 – CapelliC