当我做断言时:
assert(-color(red)).
它给了我错误:
ERROR: assert/1: No permission to modify static procedure `(-)/1'
所以我将-color改为动态:
dynamic -color/4.
现在它给了我错误:
ERROR: dynamic/1: Type error: `atom' expected, found `-color'
有什么想法吗?
答案 0 :(得分:3)
首先,正如Prolog本身告诉你的那样,它正在以-color(foo)
的形式阅读-(color(foo))
。这就是为什么它抱怨(-)/1
而不是-color
。你不能用连字符开始一个原子。
其次,您需要asserta/1
或assertz/1
,而不是assert/1
。
第三,当您使用arity 4声明动态谓词时,您应该将它与arity 4一起使用,而不是arity 1.换句话说,您的动态应该是:- dynamic color/4
读取并使用asserta(color(Red,Green,Blue,Alpha))
或它应该显示为:- dynamic color/1
并使用asserta(color(red))
。 /4
与/1
的组合不是您的意思。