无权修改静态过程`(-)/1'

Jos*_*iro 1 prolog

当我做这样的断言时:

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)

有任何想法吗?

Dan*_*ons 5

首先,正如 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不是你的意思。