If ElemSpec is an atom, it must specify a non-logical variable visible from the caller module.
If ElemSpec is a compound term, it must specify a visible array element. all its arguments must be non negative integers smaller than the bounds specified with array/1/2 or variable/1.
Success:
[eclipse]: local(array(a(4), prolog)),
setval(a(1), -2),
incval(a(1)),
getval(a(1), X).
X = -1
yes.
[eclipse]: local(array(g(4), integer)),
incval(g(1)),
getval(g(1), X).
X = 1
yes.
[eclipse]: setval(count, 0),
repeat,
writeln(hello),
incval(count),
getval(count, X),
X >= 3, !.
hello
hello
hello
X = 3
yes.
Error:
incval(X). (Error 4).
incval(a(2.0)). (Error 5).
setval(a, 2.0), incval(a). (Error 5).
local(array(a(2), float)),
incval(a(1)). (Error 5).
local(array(a(10), integer)),
incval(a(-2)). (Error 6).
incval(no_array(0)). (Error 41).
incval(no_var). (Error 41).