Algorithm Prolog Domino解决方案

Algorithm Prolog Domino解决方案,algorithm,prolog,Algorithm,Prolog,我需要一个算法,给定一组多米诺骨牌碎片,返回游戏的每一个可能的结尾 我已经找到了这个,但它只会增加一部分,所以它不会给你所有可能的解决方案 我用这个[5,4,4-3,3-2,2-1]替换了这个[5,4],[4,3],[3,2],[2,1],并尝试添加这一行多米诺订单(In,X,[Out |[X,Y]]:-选择(工件,In,剩余),交换或不交换(工件,[X,Y]),多米诺订单(剩余,Y,Out)。,但是它不起作用。写下详细的逻辑会导致代码有些复杂。 相反,我建议快速检查有效性,让Prolog计算出

我需要一个算法,给定一组多米诺骨牌碎片,返回游戏的每一个可能的结尾

我已经找到了这个,但它只会增加一部分,所以它不会给你所有可能的解决方案


我用这个
[5,4,4-3,3-2,2-1]
替换了这个
[5,4],[4,3],[3,2],[2,1]
,并尝试添加这一行
多米诺订单(In,X,[Out |[X,Y]]:-选择(工件,In,剩余),交换或不交换(工件,[X,Y]),多米诺订单(剩余,Y,Out)。
,但是它不起作用。

写下详细的逻辑会导致代码有些复杂。 相反,我建议快速检查有效性,让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]).

非常好的节目!如果您将其编写为
domino(R):-…
,则可以使其更加通用。列出
Spare
Curr
的目的是什么?每次我更改它们的元素时,它不是给出所有的解决方案,就是给出所有的解决方案,而是重复它们。@MiguelAndrade:只是给参数一个明确的名称而已