问题描述
当我做这样的断言时:
assert(-color(red)).
它给了我错误:
ERROR: assert/1: No permission to modify static procedure `(-)/1'
所以我将 -color 更改为动态:
so i change -color to dynamic:
dynamic -color/4.
现在它给了我错误:
ERROR: dynamic/1: Type error: `atom' expected, found `-color'
有什么想法吗?
推荐答案
首先,正如 Prolog 本身告诉你的那样,它将 -color(foo)
读取为 -(color(foo))
.这就是它抱怨 (-)/1
而不是 -color
的原因.原子不能以连字符开头.
First off, as Prolog itself is telling you, it is reading -color(foo)
as -(color(foo))
. That's why it's complaining about (-)/1
and not -color
. You cannot begin an atom with a hyphen.
其次,你想要 assert/1
或 assertz/1
,而不是 assert/1
.
Second, you want asserta/1
or assertz/1
, not 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
的组合不是你的意思.
Third, when you declare a dynamic predicate with arity 4, you should use it with arity 4, not arity 1. In other words, your dynamic should either read :- dynamic color/4
and be used asserta(color(Red,Green,Blue,Alpha))
or it should read :- dynamic color/1
and be used asserta(color(red))
. The combination /4
with /1
is not what you mean.
这篇关于无权修改静态过程 `(-)/1'的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!