所以对于以下问题我试着像这样设置
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和相邻楼层的部分,我也只能猜测我需要说每层楼都不相等所以我不知道住在同一楼层的人。
答案 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.
除了那个错误之外,它会产生我想要的答案。