无权修改静态过程

时间:2013-04-29 16:58:26

标签: prolog

当我做断言时:

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'

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

首先,正如Prolog本身告诉你的那样,它正在以-color(foo)的形式阅读-(color(foo))。这就是为什么它抱怨(-)/1而不是-color。你不能用连字符开始一个原子。

其次,您需要asserta/1assertz/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的组合不是您的意思。