当我做这样的断言时:
assert(-color(red)).
Run Code Online (Sandbox Code Playgroud)
它给了我错误:
ERROR: assert/1: No permission to modify static procedure `(-)/1'
Run Code Online (Sandbox Code Playgroud)
所以我将 -color 更改为动态:
dynamic -color/4.
Run Code Online (Sandbox Code Playgroud)
现在它给了我错误:
ERROR: dynamic/1: Type error: `atom' expected, found `-color'
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
首先,正如 Prolog 本身告诉你的那样,它读-color(foo)作-(color(foo)). 这就是为什么它抱怨(-)/1而不是-color。不能以连字符开头原子。
其次,你想要asserta/1or assertz/1,不是assert/1。
第三,当你声明一个 arity 4 的动态谓词时,你应该使用它 arity 4,而不是 arity 1。换句话说,你的动态应该 read :- dynamic color/4and be usedasserta(color(Red,Green,Blue,Alpha))或者它应该 read :- dynamic color/1and be used asserta(color(red))。/4与的组合/1不是你的意思。