我必须在我的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。这就是我失去的地方。如果您对如何获得结果有任何建议,将非常欢迎。
答案 0 :(得分:0)
如果您考虑: - 表示“暗示”或“如果是”,那么您可以看到您的最终规则向后(即如果某些东西是红色或绿色,那么它就是苹果)。此外,Prolog不允许您绘制包含OR的推理。因此,您可以得到的最接近的是:
red(X) :- apple(X).
green(X) :- apple(X).
也就是说,如果它是苹果,那么它是红色的,如果它是苹果,那么它就是绿色。是的,这确实意味着如果它是一个苹果,你可以证明某些东西是红色和绿色,但你也没有,并且它将满足你red(A); green(A)
成功的要求(A是一个东西是苹果)。如果您要求red(A)
和green(A)
不能同时为真,那将需要更多的工作。