Prolog地板拼图

时间:2014-11-02 20:37:11

标签: prolog

贝克,库珀,弗莱彻,米勒和史密斯住在一栋五层楼的建筑里。 Baker不住在5楼,Cooper住在一楼。弗莱彻不住在顶部或底部,他不在史密斯或库珀附近的地板上。米勒住在库珀上方的一层,低于4楼。谁住在什么楼层?

所以对于以下问题我试着像这样设置

floor(1).
floor(2).
floor(3).
floor(4).
floor(5).

house(B,C,F,M,S) :-
   floor(B),
   floor(C),
   floor(F),
   floor(M),
   floor(S),
   B<5,C>1,F>1,F<5,M>C,M<4.

现在你可以看到我无法弄清楚如何表示关于F和相邻楼层的部分,我也只能猜测我需要说每层楼都不相等所以我不知道住在同一楼层的人。

1 个答案:

答案 0 :(得分:0)

我解决了这个问题,所有的条件都是由教授给出的,但是如果你手工解决问题她就犯了一个逻辑错误 5 | S 4 | F 3 | M 2 | C 1 |乙 你可以看到,如果你最终遵守规则,S可以生存的唯一一个是第5层,但是这不符合规则之一,所以我会告诉教授她犯了一个错误,就prolog代码来说我做的就像这个

floor(1).
floor(2).
floor(3).
floor(4).
floor(5).
fadjacent(X,Y):- X \= (Y + 1) ,X \= (Y - 1).
%fadjacent(X,Y):- X \= Y - 1.





house(B,C,F,M,S) :-
floor(B),
floor(C),
floor(F),
floor(M),
floor(S),
B<5,C>1,F>1,F<5,M>C,M<4,fadjacent(F,S),fadjacent(F,C),B\=C,B\=F,B\=M,B\=S,
    C\=B,C\=F,C\=M,C\=S,F\=B,F\=C,F\=M,F\=S,M\=C,M\=F,M\=B,M\=S,
    S\=C,S\=F,S\=M,S\=B.

除了那个错误之外,它会产生我想要的答案。