求高手搭救,用visual prolog怎么编写爱因斯坦的超级问题
prolog吧
全部回复
仅看楼主
level 4
仙侠w 楼主
在一条街上
有5座房子 喷了5种颜色
每个房里住着不同国籍的人
每个人喝不同的饮料
抽不同的香烟
养不同的宠物。
请问:
谁养鱼?
提示:
1.英国人住红色房子
2.瑞典人养狗
3.丹麦人喝茶
4.绿色房子在白色房子左面
5.绿色房子主人喝咖啡
6.抽 Pall Mall 香烟的人养鸟
7.黄色房子主人抽 Dunhill 香烟
8.住在中间房子的人喝牛奶
9.挪威人住第一间房
10.抽 Blends 香烟的人住在养猫的人隔壁
11.养马的人住抽 Dunhill 香烟的人隔壁
12.抽 Blue Master 的人喝啤酒
13.德国人抽 Prince 香烟
14.挪威人住蓝色房子
15.隔壁抽 Blends 香烟的人有一个喝水的邻居
2014年11月28日 13点11分 1
level 2
这太简单了噻!
2015年01月13日 13点01分 2
level 2
%先编写颜色、国籍、宠物、香烟和饮料的信息即
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分
level 2
以下是运行结果:
X = [h(yellow, norwegian, fox,kools, water), h(blue, ukrainian, horse, chesterfields, tea), h(red,englishman, snails, winston, milk), h(ivory, spaniard, dog, 'Lucky Strike','orange juice'), h(green, japanese, zebra, parliaments, coffee)]
2015年01月13日 13点01分 4
请问运行结果消耗了多长时间?瞬间出来的?
2015年04月11日 03点04分
1