我正在尝试用Prolog解决爱因斯坦之谜。对不起我的英语。任务是:
我的代码看起来像,我不知道如何解决雇用问题:
person('Name', 'Job','Children','Hire','Floor').
houses(Hs):-
length(Hs),
member(person(mullerovi,_,4,1770,_),Hs),
member(person(_,administrator,_,_,2),Hs),
member(person(_,doctor,_,1800,_),Hs),
pays_less(person(_,doctor,_,Hire,_),person('Meinova',_,_,Hire-60,_),Hs),
member(person(_,_,5,_,4),Hs),
have_one_children_less(person('Kernovi',_,Children-1,_,_),person(_,teacher,Children,_,_),Hs),
member(person('Kaufmann','Sales representative',_,_,_),Hs),
member(person(_,teacher,_,1740,_),Hs),
member(person(_,janitor,_,_,4),Hs),
member(person(_,_,0,1760,_),Hs),
have_2x_children(
person(_,_,2*Children,_,2),
person(_,_,Children,_,3),Hs),
lives_above(person('Hanz',_,_,_,_),person('Kernovi',_,_,_,_),Hs),
lives_above(person(_,janitor,_,_,_),person(_,_,2,_,_),Hs),
pays_more(
person(_,_,_,Hire+10,4),
person(_,_,_,Hire,'Ground floor'),Hs),
pays_more(
person(_,'Sale representative',_,Hire+30,_),
person(_,janitor,_,Hire,_),Hs).
感谢您的任何建议。
答案 0 :(得分:0)
“在公寓楼是5个单位”翻译为length(Hs,5)
。
然后,pays_less( person(_,doctor,_,Hire,_), person('Meinova',_,_,Hire-60,_),Hs)
未定义;它应该是
.....
member( person(_,doctor,_,Hire,_), Hs),
member( person('Meinova',_,_,Hire2,_), Hs),
.....
Hire2 is Hire-60,
.....
或类似的东西。
熟悉is/2
运算符及其前提条件。 B=80, A = B-60
成功,A
与-(80,60)
统一。您希望B=80, A is B-60
成功并将A
与20
统一起来(但如果B
还不是数字表达式,则会失败)。
行Hire2 is Hire-60,
应尽可能放在谓词中,以获得最大效率。