首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Prolog -描述事实和规则

Prolog -描述事实和规则
EN

Stack Overflow用户
提问于 2015-09-21 01:13:54
回答 1查看 711关注 0票数 3

我想在prolog中描述以下事实和规则:

  1. Nick正在用Java编程。
  2. Nick正在用Python编程
  3. Nick是任何用Java和Python编程的人的朋友
  4. Jim正在用Nick所做的所有语言编程。

我找到了1,2和3的解决方案,但没有找到第4种解决方案,尽管我非常希望得到一个完整的解决方案。

我的解决方案:

代码语言:javascript
复制
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),
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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有可能(虽然不太可能)想从他的朋友那里学习东西,例如,他只是那些至少懂一种他不懂的编程语言的人的朋友。
  • 最后一个问题可以写成: 编程(jim,X) :-编程(nick,X)。 这句话的一个几乎机械的翻译是:"Jim是用X编程的,如果 nick是用X编程的“;(请记住,这不是if和只有if);所以您仍然可以添加Jim可以使用的其他语言。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32685993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档