[英]Prolog - Describe facts and rules
我想在prolog中描述以下事实和规则:
我找到了1,2和3的解决方案,但不是第4个,即使我真的很感激完整的解决方案。
我的解决方案
male(Nick).
male(Jim).
programming(Nick, java).
programming(Nick, python).
friends(X,Y):-
programming(X,java),
programming(X,python),
programming(Y,java),
programming(Y,python),
您的解决方案中存在一些错误:
以大写字母开头的常数(如Nick
)不是常数; 但是一个变数。 这样一行:
male(Nick).
说每个人都是male/1
; 你应该纠正它:
male(nick). male(jim).
(顺便说一下programming/2
)。 此外,这似乎不是作业的一部分(?)。
friends/2
谓词以逗号( ,
)结尾,
这意味着Prolog解析器需要更多输入,并将下一个事实视为当前子句的一部分; 你应该用点( .
)结束条款;
friends/2
谓词在语义上是不正确的,因为这个问题只是关于Nick的陈述:你因此不能使用X
作为人,你应该把它专门化为:
friends(nick,Y):- programming(Y,java), programming(Y,python).
你的friends/2
版本说: “如果X和Y都能用Java和Python编程,那么X就是Y的朋友” ; 虽然这导致Nick是Java和Python程序中每个人的朋友,但是你的陈述比应该允许的更广泛:我们不知道Jim是否根据这些规则决定谁是他的朋友。 例如,吉姆想要从他的朋友那里学习东西是可能的(尽管可能不太可能),例如,他们只是知道至少一种他不掌握的编程语言的人的朋友。
最后一个问题可以写成:
programming(jim,X) :- programming(nick,X).
语句的几乎机械翻译是: “ 如果尼克在X中编程, 则 Jim在X中编程” ; (介意这不是if-only-only-if ); 所以你仍然可以添加Jim可以使用的其他语言。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.