【问题标题】:Prolog predicatesProlog 谓词
【发布时间】:2013-05-12 00:04:10
【问题描述】:

我目前正在学习 Prolog 中的谓词逻辑。我无法回答有关该主题的问题,并且想知道使用 Prolog 谓词解决此类问题所采取的步骤。我有一个场景,它必须在 Prolog 谓词中仅使用两个不同的谓词名称来表示。

  1. A 和 B 结婚了
  2. B 喜欢 C
  3. C和D结婚了
  4. D 喜欢 E
  5. F 喜欢 B
  6. E 喜欢 B
  7. E 和 G 结婚了
  8. A 喜欢 G

【问题讨论】:

  • cs.stackexchange.com 或许更适合提出这样的问题。
  • @CiaranG 不,这里是关于 Prolog 编程的此类问题的正确位置。

标签: prolog predicates


【解决方案1】:

只要写下它的内容。

are_married(a,b).

likes(b,c).

等等。到目前为止,我们已经使用了两个谓词名称。

在 Prolog 中,原子由以小写字母开头的标识符表示。以大写字母或下划线_ 开头的标识符表示逻辑变量。

【讨论】:

  • 它们都可以放在两个谓词中吗?例如 are_married((a,b),(c,d),(e,g))。
  • @DrKhan 不,这不是 Prolog 的工作方式。您当然可以定义另一个谓词married_couples([ (a,b), (c,d), (e,f) ]).。但是,要娶一对已婚夫妇,您必须花一些工作。
  • 以下是否正确,我产生了两个谓词:
    1. is_married([a,b],[c,d],[e,g])。 2. 喜欢([b,c],[d,e],[f,b],[e,b],[a,g])。
  • @DrKhan 我不明白你的意思。如果您可以更全面地制定背景并描述您的需求,那么您可以发布一个新问题。 :)