List 序言/座位问题

List 序言/座位问题,list,prolog,List,Prolog,这就是问题所在。 “阿斯特夫妇、布莱克夫妇、克雷恩夫妇和戴维斯夫妇围坐在一张圆桌旁。阿斯特太太受到布莱克先生的侮辱,布莱克先生坐在她左边的旁边。布莱克先生受到克兰夫人的侮辱,克兰夫人坐在桌子中央对面。克兰夫人受到女主人戴维斯夫人的侮辱。女主人是唯一坐在已婚夫妇之间的人。女主人是唯一坐在已婚夫妇之间的人。女主人受到了唯一坐在两个男人之间的人的侮辱。谁侮辱了女主人?还打印了从女主人开始的座位顺序。” 所以我尝试的是 insult(A, B). /*A insults B*/ seats([seat

这就是问题所在。 “阿斯特夫妇、布莱克夫妇、克雷恩夫妇和戴维斯夫妇围坐在一张圆桌旁。阿斯特太太受到布莱克先生的侮辱,布莱克先生坐在她左边的旁边。布莱克先生受到克兰夫人的侮辱,克兰夫人坐在桌子中央对面。克兰夫人受到女主人戴维斯夫人的侮辱。女主人是唯一坐在已婚夫妇之间的人。女主人是唯一坐在已婚夫妇之间的人。女主人受到了唯一坐在两个男人之间的人的侮辱。谁侮辱了女主人?还打印了从女主人开始的座位顺序。”

所以我尝试的是

insult(A, B). /*A insults B*/

seats([seat(_,1),seat(_,2),seat(_,3),seat(_,4),
seat(_,5),seat(_,6),seat(_,7),seat(_,8)]). /*Clockwise*/

table(Seats,Who) :- seats(Seats),
    member(seat(mrastor,MA),Seats), 
    member(seat(mrsastor,MRSA),Seats),
    member(seat(mrblake,MB),Seats), insult(MB,MRSA), MB=:=MRSA+1,
    member(seat(mrsblake,MRSB),Seats),
    member(seat(mrcrane,MC),Seats), insult(MRSC,MB),
    member(seat(mrscrane,MRSC),Seats), opposite(MRSC, MB),
    member(seat(mrdavis,MD),Seats), 
    member(seat(mrsdavis,MRSD),Seats), insult(MRSD,MRSC),
    (between_men(MA, Who, MB); between_men(MA, Who, MC); 
    between_men(MA, Who, MD); between_men(MB, Who, MC); 
    between_men(MB, Who, MD); between_men(MC, Who, MD)),


    print_seat(Seats), print_who(Who, mrsdavis). /*insult(Who, mrsdavis).*/

print_seat([A | B]) :- write(A), nl,  print_seat(B).
print_seat([]).

print_who(Who, what) :- insult(Who, mrsdavis), write(Who).

member(X, [X | _]).
member(X, [_ | Y]) :- member(X, Y).

adjacent(X, Y) :- X =:= Y+1.
adjacent(X, Y) :- X =:= Y-1.

opposite(X, Y) :- X =:= Y+4. 
opposite(X, Y) :- X =:= Y-4.

between_men(X, Y, Z) :- X=Y+1, Y=Z+1.
between_men(X, Y, Z) :- X=Y-1, Y=Z-1.
我对Prolog完全陌生,这个问题我不确定我是否用正确的方式编码。有什么建议吗


我真的不明白“女主人是唯一坐在已婚夫妇中间的人”这句话是什么意思。戴维斯先生也是女主人吗?女主人除了坐在女主人旁边的两对夫妇之外,其他所有的夫妇都坐在他们的伴侣旁边?有点混乱…

您可以在当前Logtalk发行版的“示例”文件夹中找到类似的问题和解决方案。您也可以在此处在线浏览源代码:


例如,请参阅“houses.lgt”(经典)或“camp_沼泽地.lgt”源文件。

女主人是女性,“在每对已婚夫妇之间”意味着女主人的侮辱者坐在丈夫和妻子之间。我没有看到任何暗示合作伙伴必须坐在一起的东西。@jcomeau_ictx好的,这是一个很好的暗示!谢谢:Dlink已经死了。你能找到一个新的吗?修复了过时的链接。