首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >附加签入Prolog

附加签入Prolog
EN

Stack Overflow用户
提问于 2021-12-14 17:25:48
回答 1查看 61关注 0票数 0

我的任务是编写一个Prolog程序,该程序将给定的多米诺骨牌块放入循环中。我想我会先把它们排序,然后检查最后一个数字第一个数字匹配的答案。但是,负责后一个任务的谓词(domino_order2)给我带来了一些麻烦。对我如何实现最后一次检查有什么想法吗?提前谢谢你!

代码语言:javascript
运行
复制
domino_order2(L1, L2):-
    end_match(L2,L2),
    domino_order(L1, L2).

end_match([X-Y | _],L2):-
    %last(L2,X).
    append(_,[Y-X],L2).

domino_order(L1, L2) :-
    domino_order(L1, _, L2).

domino_order([], _, []) :- !.
domino_order(In, X, [X-Y | Out]) :-
    select(Piece, In, Remaining),
    swap_or_not(Piece, X-Y),
    domino_order(Remaining, Y, Out).

swap_or_not(X-Y, X-Y).
swap_or_not(X-Y, Y-X).

预期结果:

代码语言:javascript
运行
复制
?- domino_order2([4-3,3-5,5-8,8-4],Out).
Out = [4-3, 3-5, 5-8, 8-4] ;
Out = [3-4, 4-8, 8-5, 5-3] ;
Out = [3-5, 5-8, 8-4, 4-3] ;
Out = [5-3, 3-4, 4-8, 8-5] ;
Out = [5-8, 8-4, 4-3, 3-5] ;
Out = [8-5, 5-3, 3-4, 4-8] ;
Out = [8-4, 4-3, 3-5, 5-8] ;
Out = [4-8, 8-5, 5-3, 3-4].
?- domino_order2([4-3,3-5,5-8,8-5],Out).
false.
EN

回答 1

Stack Overflow用户

发布于 2021-12-14 22:21:58

下面是一个重写,它与所需的输出(但不是输出的确切顺序)匹配:

代码语言:javascript
运行
复制
domino_order(Lst, Ord) :-
    (Lst1 = Lst ; reverse_dominos(Lst, Lst1)),
    domino_order_left_to_right(Lst1, Ord).


reverse_dominos(Lst, RevLst) :-
    reverse_dominos_(Lst, [], RevLst).

reverse_dominos_([], RevLst, RevLst).
reverse_dominos_([X-Y|Tail], SoFar, RevLst) :-
    % Reverse the numbers and their position
    reverse_dominos_(Tail, [Y-X|SoFar], RevLst).


domino_order_left_to_right(Lst, Lst1) :-
    % Get a starting point in Lst
    append([Before, [Start], After], Lst),
    % Rearrange the list
    append([[Start], After, Before], Lst1).

结果在swi-prolog:

代码语言:javascript
运行
复制
?- time(findall(Ord, domino_order([4-3,3-5,5-8,8-4], Ord), Ords)).
% 244 inferences, 0.000 CPU in 0.000 seconds (97% CPU, 1475890 Lips)
Ords = [[4-3,3-5,5-8,8-4],[3-5,5-8,8-4,4-3],[5-8,8-4,4-3,3-5],[8-4,4-3,3-5,5-8],[4-8,8-5,5-3,3-4],[8-5,5-3,3-4,4-8],[5-3,3-4,4-8,8-5],[3-4,4-8,8-5,5-3]].
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70353119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档