【发布时间】:2016-11-14 22:48:37
【问题描述】:
我是 prolog 的新手,我正在尝试解决这个难题。我在 youtube 上做了一些关于 prolog 基础的教程,但我需要一些帮助来解决下面的难题。
两周前,四位爱好者在他们附近的天空中目击了天体。这四个人都在不同的日子报告了他或她的目击事件。联邦调查局来了,能够给每个人不同的解释,说明他或她“真正”看到了什么。你能确定每个人在哪一天(周二到周五)看到这个物体,以及它原来是那个物体吗?
- 先生K 在本周早些时候的某个时间比看到气球的人发现了他,但在本周晚些时候的某个时间,比发现风筝的人(不是 G 女士)。
- 星期五的目击事件是由 Barn 女士或看到飞机的人(或两者兼有)发现的。
- 先生Nik 周二没有出现。
- 先生K 不是那个对象原来是电线杆的人。
我已经正确设置了我的规则,但我似乎无法理解逻辑。我正在寻找指导而不是直接答案。在最右边,我列出了我试图回答的每个问题的编号
enthu(mr_k).
enthu(ms_barn).
enthu(ms_g).
enthu(mr_nik).
object(ballon).
object(kite).
object(plane).
object(tele_pole).
day(tuesday).
day(wednesday).
day(thursday).
day(friday).
sight(X,ballon).
sighting(mr_k):- 1
day(X),
sight(X,Y),
didntc_kite(ms_g).
friday_sight:- enthu(ms_barn); 2
saw(X,plane);
both(ms_barn,X).
nosight_tuesday(mr_nik,X). 3
no_telepole(mr_k,Y). 4
【问题讨论】:
-
你第一次声明这个
mr_klien而不是mr_k有什么原因吗? -
啊哈,这就是我复制和粘贴不正确的结果。已更新。
-
什么是“逻辑压缩包”?
-
哦,你的意思是“向下拍”吗?
-
指针 1:看看你是否可以用
sighting作为感兴趣的动作/对象重写你的规则。例如,而不是说nosight_tuesday(mr_nik,X).。建立规则,使瞄准trueikesighting(mr_nik) :- ...sighting(mr_k) :- ...等等
标签: prolog zebra-puzzle