序言 - 爱因斯坦之谜



我正在尝试使用Prolog解决爱因斯坦之谜。对不起我的英语。任务是:

  • 在公寓楼是5个公寓。(一楼 A 1.、2.、3.、4. 楼)
  • 穆列罗维家庭有4个孩子。
  • 管理员住在中间楼层。
  • 梅耶罗娃夫人支付的公寓60克朗比3楼的医生少。
  • 住在最顶层的家庭有5个孩子。
  • 家庭 克尔诺维有1个孩子比老师。
  • Kaufmann先生担任销售代表。
  • 老师为她的1740克朗付钱。
  • 在最高的楼层,看门人住着。
  • 医生支付他的1800克朗。
  • 在价值1760克朗的公寓里,没有任何孩子。
  • 在2楼,家庭的孩子比3楼的家庭多两倍。
  • 汉茨先生住在克尔诺维家的正上方。
  • 在看门人下面的公寓里住着2个孩子。
  • 穆列罗维支付了他们的1770克朗。
  • 屋顶公寓比一楼便宜10克朗。
  • 销售代表比看门人多支付 30 克朗。

我的代码看起来像,我不知道如何解决雇佣问题:

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).

感谢您的任何建议。

"在公寓块中是 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成功并将A20统一起来(但如果B还不是数值表达式,则会失败)。

Hire2 is Hire-60,应放置在谓词中尽可能高的位置,以获得最大效率。

相关内容

  • 没有找到相关文章

最新更新