爱因斯坦谜语中的数值比较

Posted

技术标签:

【中文标题】爱因斯坦谜语中的数值比较【英文标题】:Numerical comparision in Einstein Riddle 【发布时间】:2021-02-21 09:37:05 【问题描述】:

我的版本对学生的姓名、年龄、出身和学科感兴趣。

solve :-
    length(X, 6),                  % there are six students
    member([manuel, 19, _, _], X), % Manuel is 19 years old
    member([_, 20, _, win], X),    % 20 years old student studies win
    ...

但是有些规则我不知道如何在 Prolog 中实现。例如:

Oliver 比数学学生大两岁,但比华盛顿的学生小两岁。

如何创建一个可以比较年龄的规则?

【问题讨论】:

【参考方案1】:
member([oliver,OLIVER_AGE,_,_],X) ,
member([_,MATH_AGE,_,math],X) ,
member([_,WASHINGTON_AGE,washington,_],X) ,
OLIVER_AGE is MATH_AGE + 2 ,
OLIVER_AGE is WASHINGTON_AGE - 2

【讨论】:

最好使用 CSP 运算符#=,因为对于is/2,右侧的参数必须全部已知。但是对于#=,情况并非如此。

以上是关于爱因斯坦谜语中的数值比较的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在 Prolog 中扩展爱因斯坦的谜语?

爱因斯坦谜语与术语列表

爱因斯坦之谜

列表中的唯一元素(Prolog)

斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时6

[THUSC2017]巧克力[斯坦纳树+随机化]