gpt4 book ai didi

prolog - 如何在序言中检查订单?

转载 作者:行者123 更新时间:2023-12-04 07:44:14 25 4
gpt4 key购买 nike

我试图在序言中解决这个难题

Five people were eating apples, A finished before B, but behind C. D finished before E, but behind B. What was the finishing order?


我当前的解决方案有单例变量,我不知道如何解决这个问题。
finishbefore(A, B, Ls) :- append(_, [A,B|_], Ls).

order(Al):-
length(Al,5),
finishbefore(A,B,Al),
finishbefore(C,A,Al),
finishbefore(D,E,Al),
finishbefore(B,D,Al).
%%query
%%?- order(Al).

最佳答案

让我们更正 finishbefore/3 :

finishbefore(X, Y, L) :-
append(_, [X|R], L),
memberchk(Y, R).
然后让我们对已知约束进行编码:
check_finish_time(Order) :-
forall(
member(X<Y, [a<b,c<a, d<e,d<b]),
finishbefore(X,Y,Order)).
现在让我们测试所有可能的排序
?- permutation([a,b,c,d,e],P),check_finish_time(P).
我得到 9 个解决方案,使用 ; 回溯...也许存在应该编码的隐式约束。
编辑
抱歉打扰了,已找到错误。交换最后一个约束顺序,即 b<d而不是 d<b ,现在只允许 1 个解决方案...

关于prolog - 如何在序言中检查订单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67278346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com