1

当我做这样的断言时:

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'

有任何想法吗?

4

1 回答 1

5

首先,正如 Prolog 本身告诉你的那样,它读-color(foo)-(color(foo)). 这就是它抱怨(-)/1而不是抱怨的原因-color。您不能以连字符开头的原子。

其次,你想要asserta/1or assertz/1, not assert/1

第三,当你用 arity 4 声明一个动态谓词时,你应该用它用 arity 4,而不是 arity 1。换句话说,你的 dynamic 应该 read :- dynamic color/4and be usedasserta(color(Red,Green,Blue,Alpha))或者 it should read :- dynamic color/1and be used asserta(color(red))。组合不是你的意思/4/1

于 2013-04-29T17:02:23.753 回答