%先编写颜色、国籍、宠物、香烟和饮料的信息即
color(h(C,N,P,Y,D),C). %住房间里的颜色为 C
nation(h(C,N,P,Y,D),N). %住房间里人的国籍为 N
pet(h(C,N,P,Y,D),P). %住房间里养的宠物为 P
yan(h(C,N,P,Y,D),Y). %住房间里的人抽烟牌子为 Y
drink(h(C,N,P,Y,D),D). %住房间里的人喝饮料牌子为 D
%然后编写相对位置关系
left(A,B,[A,B,C,D,E]). %A在B的左面,下同
left(B,C,[A,B,C,D,E]).
left(C,D,[A,B,C,D,E]).
left(D,E,[A,B,C,D,E]).
right(B,A,[A,B,C,D,E]). %B在A的右面,下同
right(C,B,[A,B,C,D,E]).
right(D,C,[A,B,C,D,E]).
right(E,D,[A,B,C,D,E]).
middle(X,[_,_,X,_,_]). %中间的为X
first(A,[A|X]). %最先的元素
laste(E,[_,_,_,_,E]). %最后的元素
%选择再校验
member(A,[A|X]).
member(A,[B|X]) :- member(A,X).
solve(X,TT,TTT):-
%首先把X绑定为房间列表,注意此时的房间的属性还不能确定,所以都使用变量代表。
X=[h(C1,N1,P1,Y1,D1),h(C2,N2,P2,Y2,D2),h(C3,N3,P3,Y3,D3),h(C4,N4,P4,Y4,D4),h(C5,N5,P5,Y5,D5)],
%①英国人(englishman)住在红色(red)的房子里。
member(Z1,X), %首先从X列表中选择一个房间Z1,
color(Z1,red), %Z1的颜色是red。
nation(Z1,englishman), %Z1里住的人是englishman。 下同。
%②西班牙人(spaniard)养了一条狗(dog)。
member(Z2,X),
pet(Z2,dog),
nation(Z2,spaniard),
%③挪威人(norwegian)住在左边的第一个房子里。
first(Z3,X),
nation(Z3,norwegian),
%④黄房子(yellow)里的人喜欢抽kools牌的香烟。
member(Z4,X),
yan(Z4,kools),
color(Z4,yellow),
%⑤抽chesterfields牌香烟的人与养狐狸(fox)的人是邻居。
member(Z5,X),
pet(Z5,fox),
(left(Z5,Z6,X);right(Z5,Z6,X)), %所谓邻居,就是Z5在Z6的左面或右面。
yan(Z6,chesterfields),
%⑥挪威人(norwegian)住在蓝色(blue)的房子旁边。
member(Z7,X),
color(Z7,blue),
(left(Z7,Z8,X); right(Z7,Z8,X)),
nation(Z8,norwegian),
%⑦抽winston牌香烟的人养了一只蜗牛(Snails)。
member(Z9,X),
yan(Z9,winston),
pet(Z9,snails),
%⑧抽Lucky Strike牌香烟的人喜欢喝桔子汁(orange juice)。
member(Z10,X),
drink(Z10,'orange juice'),
yan(Z10,'LuckyStrike'),
%⑨乌克兰人(ukrainian)喜欢喝茶(tea)。
member(Z11,X),
nation(Z11,ukrainian),
drink(Z11,tea),
%⑩日本人(japanese)抽parliaments牌的烟。
member(Z12,X),
nation(Z12,japanese),
yan(Z12,parliaments),
%11抽kools牌的香烟的人与养马(horse)的人是邻居。
member(Z13,X),
pet(Z13,horse),
(left(Z13,Z14,X);right(Z13,Z14,X)),
yan(Z14,kools),
%12喜欢喝咖啡(coffee)的人住在绿(green)房子里。
member(Z15,X),
color(Z15,green),
drink(Z15,coffee),
%13绿(green)房子在象牙白(ivory)房子的右边(图中的右边)。
member(Z16,X),
color(Z16,ivory),
right(Z17,Z16,X), %绿房子在象牙白的右面
color(Z17,green), %
%14中间那个房子里的人喜欢喝牛奶(milk)。
middle(Z18,X),
drink(Z18,milk),
%以上是所有的条件,下面开始回答我们的问题。
%找出宠物为zebra的房间。
member(TT,X),
pet(TT,zebra),
%找出喝水的房间。
member(TTT,X),
drink(TTT,water).
2015年01月13日 13点01分
3
只解决问题。难道你做1+1=2还要注明出处呀?
2015年04月13日 15点04分