2016-12-29 54 views
1

我需要給定一組骨牌塊的算法,返回每個可能的結束比賽。Prolog的多米諾解決方案

我已經找到了這一個,Prolog domino game,但它只是增加了作品與集合的beggining,因此它不會給你每一個可能的解決方案。

我替換了這個[5-4, 4-3, 3-2, 2-1],用這個[[5,4], [4,3], [3,2], [2,1]],並嘗試添加這一行domino_order(In, X, [Out|[X,Y]]) :- select(Piece, In, Remaining), swap_or_not(Piece, [X,Y]), domino_order(Remaining, Y, Out).,但它不起作用。

回答

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