当我做这样的断言时:
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'
有任何想法吗?
当我做这样的断言时:
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'
有任何想法吗?
首先,正如 Prolog 本身告诉你的那样,它读-color(foo)
作-(color(foo))
. 这就是它抱怨(-)/1
而不是抱怨的原因-color
。您不能以连字符开头的原子。
其次,你想要asserta/1
or assertz/1
, not assert/1
。
第三,当你用 arity 4 声明一个动态谓词时,你应该用它用 arity 4,而不是 arity 1。换句话说,你的 dynamic 应该 read :- dynamic color/4
and be usedasserta(color(Red,Green,Blue,Alpha))
或者 it should read :- dynamic color/1
and be used asserta(color(red))
。组合不是你的意思/4
。/1