Prolog - 描述事实和规则
Prolog - Describe facts and rules
我想在序言中描述以下事实和规则:
- 尼克正在Java编程。
- Nick 在Python
编程
- Nick 是在 Java 和 Python
中编程的任何人的朋友
- Jim 正在使用 Nick 使用的所有语言进行编程。
我找到了 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
版本说:"A person X is a friend of a person Y, if both X and Y can program in Java and Python";尽管这导致 Nick 是在 Java 和 Python 中编程的每个人的朋友,但您的陈述超出了应允许的范围:例如,我们不知道 Jim 是否决定了谁是根据这些规则与他交朋友。例如,Jim 有可能(虽然可能不太可能)想从他的朋友那里学习东西,例如,他只与至少知道一种他不掌握的编程语言的人做朋友。
最后一题可以写成:
programming(jim,X) :-
programming(nick,X).
语句的几乎机械翻译是:"Jim is programming in X if nick is programming in X"; (注意这不是 if-and-only-if);所以您仍然可以添加 Jim 可以使用的其他语言。
我想在序言中描述以下事实和规则:
- 尼克正在Java编程。
- Nick 在Python 编程
- Nick 是在 Java 和 Python 中编程的任何人的朋友
- Jim 正在使用 Nick 使用的所有语言进行编程。
我找到了 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
版本说:"A person X is a friend of a person Y, if both X and Y can program in Java and Python";尽管这导致 Nick 是在 Java 和 Python 中编程的每个人的朋友,但您的陈述超出了应允许的范围:例如,我们不知道 Jim 是否决定了谁是根据这些规则与他交朋友。例如,Jim 有可能(虽然可能不太可能)想从他的朋友那里学习东西,例如,他只与至少知道一种他不掌握的编程语言的人做朋友。最后一题可以写成:
programming(jim,X) :- programming(nick,X).
语句的几乎机械翻译是:"Jim is programming in X if nick is programming in X"; (注意这不是 if-and-only-if);所以您仍然可以添加 Jim 可以使用的其他语言。