【问题标题】:Puzzle in PrologProlog 中的谜题
【发布时间】:2014-12-20 12:56:45
【问题描述】:

任何人都可以解决这个难题:

使用给出的线索找出每个人的名字、酒、主菜和价格。 以下是此拼图中使用的所有类别和选项。

名字:琳达、尼克、罗宾、弗吉尼亚 葡萄酒:波尔多、基安蒂、梅洛、设拉子 主菜:炒牛肉、柑橘鸡肉、菲力牛排、红鲷鱼 价格:24.99 美元、25.99 美元、26.99 美元、27.99 美元

线索:

  1. 点红鲷鱼的食客没有波尔多酒。
  2. Lynda 支付的费用比拥有波尔多葡萄酒的人少。
  3. 无论是波尔多还是基安蒂,都不是支付 26.99 美元的人。
  4. 点了炒牛肉的食客点了基安蒂。
  5. 点柑橘鸡的食客比点了基安蒂的食客少付 1 美元。
  6. 点菲力牛排的用餐者比点了设拉子的用餐者少付钱。
  7. Virginia 要么是点了炒牛肉的食客,要么是点了红鲷鱼的食客。
  8. 喝梅洛的人比罗宾少付 1 美元。

来源:

logic-puzzles.org

【问题讨论】:

  • Einsteins Riddle Prolog的可能重复
  • 这是家庭作业吗?
  • 你尝试了什么,你卡在哪里,你认为下一步你的直接问题是什么?
  • 不,这不是家庭作业,而是一些挑战,所以我需要一个提示才能开始!!

标签: prolog zebra-puzzle


【解决方案1】:

找出每个人的名字、酒、主菜和价格

所以我们将每个人表示为 4 元复合词 p(Name,Wine,Entree,Price)。好像也有四个。

然后我们只需写下我们被告知的内容:

wine_and_dine(People):-
  length(People,4),
  Ordered1 = p(_,W1,red_snapper,_),   
             member(Ordered1, People),
             % W1 \= bordeaux, but delay writing this down 
             %                 until it is defined some more
             % or use freeze/2 in SWI:
             freeze( W1, W1 \= bordeaux),
  Lynda2 = p(lynda,_,_,PL2), 
             Had2 = p(_,bordeaux,_,PB2),
             member(Lynda2, People),
             member(Had2, People),
             % PL2 < PB2,     % check this only when they are known; or
             freeze(PL2, freeze(PB2, PL2 < PB2)),
  .... etc.

请参阅 标签上的问答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-17
    • 1970-01-01
    • 2014-12-03
    相关资源
    最近更新 更多