【问题标题】:Represent and OR function in PrologProlog 中的表示和或函数
【发布时间】:2012-02-17 23:49:38
【问题描述】:

我必须在我的序言程序中写出苹果暗示红色或绿色的语句。这是我实现的代码示例:

:-dynamic(red/1).

:-dynamic(green/1).

 apple(a).

 apple(b).

 apple(A):-red(A);green(A).

我的问题是 ?- red(a)?-green(a) 应该返回 false,因为这不是给定的事实,我将它们设置为动态的,现在 ?-red(a)?-green(a) 确实返回 false。 但是red(A);green(A). 应该返回 true,因为苹果要么是红色要么是绿色

感谢您的回复:但是我的整个问题是 ?-red(a) 和 green(a) 在单独运行时都应该返回 false。而 ?-red(a);green(a) 应该返回 true。这就是我迷路的地方。如果您对如何获得结果有任何建议,我们将非常欢迎。

【问题讨论】:

  • 谢谢大家的回复:
  • @ChrisMartin:您的编辑并没有太大的改进......

标签: prolog


【解决方案1】:

如果您认为 :- 表示“被暗示”或“如果为真”,那么您可以看到您的最终规则倒退了(即,如果某物是红色或绿色的,那么它就是一个苹果)。此外,Prolog 不允许您得出包含 OR 的推论。因此,您最接近的情况如下:

red(X) :- apple(X).
green(X) :- apple(X).

也就是说,如果它是一个苹果,它是红色的,如果它是一个苹果,它是绿色的。是的,这确实意味着如果某物是苹果,您可以证明它既是红色又是绿色,但您也没有,它将满足您的要求 red(A); green(A) 成功(其中 A 是苹果)。如果您要求 red(A)green(A) 不能同时为真,那将需要更多的工作。

【讨论】:

  • 谢谢大家的回复:但是我的整个问题是 ?-red(a) 和 green(a) 都应该返回 false 而 ?-red(a);green(a) 应该返回真。这就是我迷路的地方。如果你们对如何获得结果有任何建议,将受到极大的欢迎。那
  • 如果 red(a) 和 green(a) 单独都不为真,那么 red(a) 或 green(a) 怎么可能为真?你可以有一个规则,说(就像你做的那样)如果某个东西是红色或绿色的,那么它就是一个苹果,但它必须是其中之一,不同的苹果可以是不同的颜色。
猜你喜欢
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多