Prolog Logic 与相邻房间
Posted
技术标签:
【中文标题】Prolog Logic 与相邻房间【英文标题】:Prolog Logic with adjacent rooms 【发布时间】:2020-02-16 11:13:56 【问题描述】:这是我的问题:
Hunter、Laura、Addiley(jack)、Ramey(Sally)和 Arnie(Jim)都在现场 在同一个宿舍里,有五个相邻的卧室。猎人不睡觉 第五间卧室,劳拉没有睡在第一间卧室。阿尼 不在第一个或最后一个卧室睡觉,而且他不在 与 Addiley 或 Laura 相邻的卧室。拉米睡在某个卧室 高于劳拉。谁睡在哪间卧室?写一个序言 程序来解决这个问题。
定义什么是邻接,然后是卧室,然后创建 一个
layout(X)
,允许您输入所有规则。
这是我到目前为止的代码,我也尝试了一些变体:
adjcnt(X,Y) :- X = (Y+1;Y-1).
rooms([ bedroom(_, 1), bedroom(_, 2), bedroom(_, 3), bedroom(_, 4), bedroom(_, 5) ]).
layout(X) :- rooms(X),
member( bedroom(hunter, V), X),
member( bedroom(laura, W), X),
member( bedroom(arnie, X), X),
member( bedroom(ramey, Y), X),
member( bedroom(addiley,Z), X),
V \= 5,
W \= 1,
X \= 1,
X \= 5,
X \= adjcnt(X,Z),
X \= adjcnt(X,W),
Y @> W.
主要问题是,我是否正确计算了相邻房间?以及如何正确实施。当我尝试运行代码时,我不断得到“不”。感谢任何可以帮助我的人!
【问题讨论】:
您的最新编辑(即删除原始拼图描述和代码)使问题和答案难以理解。最好重置此编辑。此外,剩下的代码仍然存在 @CapelliC 和我回答的问题。 我删除了大部分不重要的代码和逐字逐句的问题,因为我不希望同学简单地在谷歌上搜索整个问题,到这里结束,复制我的代码,而我们都因此而陷入不必要的麻烦抄袭。我确实更新了提示,希望可以解决问题。而且我不想将问题中的代码更新为正确的代码,以便其他人可以看到我遇到的错误,以防其他人遇到类似的情况。再次非常感谢您的帮助。 关于问题陈述,这没办法:一定要清楚、完整。关于代码,尽管您保留原始有问题的代码是正确的,否则答案将毫无意义。如果您对新代码有新问题,请发布新问题。 :) 此外,SO 是一种危险的工具:您可能会在答案中获得完整的代码,而您的讲师可以像您的同学一样轻松找到它。查看有关此主题的 this answer of mine 及其链接。 :) 干杯, @JoeShmoe 请注意,根据terms of service(阅读“订阅者内容”),您在此处提供的内容,即使是在问题中,也属于 S.O.并且您放弃了对是否显示的控制权。如果您因为在学校而需要提示而不是完整答案,请将这部分作为问题陈述的一部分。 【参考方案1】:乍一看,这里有一个错字
adjcnt(X,Y) :- X = (Y+1;Y-1).
因为(=)/2 不分配 X,而是尝试unify 它的两个参数。因此,它显然失败了。您很可能正在寻找
adjcnt(X,Y) :- X is Y+1; X is Y-1.
【讨论】:
太棒了!谢谢。我显然对 Prolog 非常不熟悉,所以我非常感激。它仍然没有正常运行,我在执行布局(X)时得到了否定。所以我将不得不做更多的挖掘。谢谢!【参考方案2】:还有两件事:
您将X
用于两种完全不同的事物:一种用于房间结构,另一种用于arnies
房间的变量。建议:将room(X)
替换为room(Rooms)
,其他必要的地方也替换为Rooms
。
用于否定两个房间不相邻的not
运算符应编码为\+
,例如\+adjcnt(X,Z)
.
【讨论】:
谢谢!我最终只是将 Arnie 的变量更改为 A 而不是 X,感谢您指出这一点,我不敢相信我忽略了这一点。还调换了运营商。谢谢!! :)以上是关于Prolog Logic 与相邻房间的主要内容,如果未能解决你的问题,请参考以下文章