我正在尝试使用 Prolog 解决爱因斯坦谜语。对不起我的英语。任务是:
- 在公寓楼里有 5 个公寓。(一楼一楼、二楼、三楼、四楼)
- 穆勒罗维家族有 4 个孩子。
- 管理员住在中间楼层。
- Meierova 夫人支付的费用比 3. 楼的医生少 60 克朗。
- 住在最高楼层的家庭有 5 个孩子。
- Kernovi 家庭比老师有 1 个孩子。
- Kaufmann 先生担任销售代表。
- 老师支付了她平价 1740 克朗的费用。
- 住在最高楼层的看门人。
- 医生支付了他的平价 1800 克朗。
- 在花费 1760 克朗的公寓里,没有孩子。
- 2 楼家庭的孩子是 3 楼家庭的两倍。
- 汉兹先生住在克诺维家族的正上方。
- 在看门人下的公寓里住着 2 个孩子。
- Mullerovi 为他们的 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).
感谢您的任何建议。