我正在尝试一个练习,我必须编写如下运行的谓词colors/2
(或colors(C1,C2) :-
...):
?- colors(red,blue).
true.
?- colors(red,red).
false.
?- colors(blue,blue).
false.
所以,本质上,我必须以一种当你输入相同颜色两次时它不接受的方式来编写我的谓词。
我将我的事实定义为:
col(red,blue).
col(purple,orange).
col(green, yellow).
我正在使我的谓词成为:
colors(X,Y) :- (col(X,Y); col(Y,X)) not (col(X,X); col(Y,Y)).
我不明白为什么我的谓词不起作用。它返回一个带有“Operator Expected”的语法错误。我是说你写事实的顺序并不重要。意思是,您可以说颜色(红色,蓝色)或颜色(蓝色,红色),但是如果不返回 false,则无法查询具有相同名称的颜色。
我想知道:
- 为什么这不是一个有效的表达式。
- 我能做些什么来解决这个问题。