我想在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),发布于 2015-09-21 01:29:53
您的解决方案中有几个错误:
Nick)不是常量,而是变量。因此,这一行:
男性(尼克)
说每个人都是male/1;您应该将其更正为:
男性(尼克)男性(吉姆)。
(顺便说一句,programming/2也是这样)。此外,这似乎不是任务的一部分(?)。friends/2谓词以逗号(,)结尾,这意味着Prolog解析器需要更多的输入,并将看到下一个事实作为当前子句的一部分;您应该用点(.)结束子句;friends/2谓词在语义上是不正确的,因为这个问题只说明了Nick:因此不能使用X作为人,您应该将其专门化如下:
朋友(nick,Y):-编程(Y,java),编程(Y,python)。
你的friends/2版本说:“如果X和Y都能用Java和Python编程,一个人X就是Y的朋友”;虽然这导致了尼克是每个用Java和Python编程的人的朋友,但你的陈述比应该允许的范围更广:例如,我们不知道吉姆是否根据这些规则来决定谁是他的朋友。例如,Jim有可能(虽然不太可能)想从他的朋友那里学习东西,例如,他只是那些至少懂一种他不懂的编程语言的人的朋友。https://stackoverflow.com/questions/32685993
复制相似问题