在Prolog中表示和OR功能

时间:2012-01-24 18:07:02

标签: prolog

我必须在我的prolog程序中写下苹果暗示红色或绿色的语句。以下是我实施的代码示例:

:-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。这就是我失去的地方。如果您对如何获得结果有任何建议,将非常欢迎。

1 个答案:

答案 0 :(得分:0)

如果您考虑: - 表示“暗示”或“如果是”,那么您可以看到您的最终规则向后(即如果某些东西是红色或绿色,那么它就是苹果)。此外,Prolog不允许您绘制包含OR的推理。因此,您可以得到的最接近的是:

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

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