[ Non-logical Variables, Arrays, Bags, Shelves and Stores | Reference Manual | Alphabetic Index ]

setval(++ElemSpec, ?Value)

Sets the value of a non-logical variable or array element to the value Value.
Atom (non-logical variable) or fully instantiated compound term with positive integer arguments (array element specification).
Prolog term.


If ElemSpec is the name of a visible non-logical variable, its value gets set to a copy of the term value. If there was no variable visible from the caller module, a local non-logical variable is created and its value is set. The value of a non-logical variable can be overwritten any number of times with any data type, including a free variable. Values of non-logical variables are copies of the original term and persist across failures.

If ElemSpec is a compound term, it must specify a visible array element: all its argument must be non negative integers smaller than the bounds specified with array/1 or array/2. If the array has been created with array/2, then Value is restricted to the type given in the declaration; otherwise Value can have any type, including a free variable. Its value can be overwritten any number of times. Values of non-logical arrays are copies of the original term and persist across failures.

Deprecated functionality: If ElemSpec is the name of a visible reference, its value will be set to the term value. Please use setref/2 for this purpose.

Modes and Determinism


This predicate is sensitive to its module context (tool predicate, see @/2).


(4) instantiation fault
ElemSpec is not ground
(4) instantiation fault
ElemSpec is of an array of type integer, float or byte and Value is not instantiated
(5) type error
the type of Value is not of the declared type of ElemSpec.
(5) type error
ElemSpec is a structure whose arguments are not all integers.
(5) type error
ElemSpec is neither an atom nor a ground structure.
(6) out of range
Array index in ElemSpec is out of bounds.
(41) array or global variable does not exist
ElemSpec is an element of an array which does not exist.


          setval(a(0,0), 2),
          setval(a(1,2), "string"),
          % overwrite a(0,0) (= 2) with a free variable
          setval(a(0,0), X).
      local(array(a(4), float)),
          setval(a(0), 2.0),
          setval(a(3), -19.6).
      setval(i, 4).
      setval(j, 4),
           setval(j, "string data").

      setval(A, 2.0).            (Error 4).
      setval(a(V), 2.0).         (Error 4).
      setval(a(1.0), 2).         (Error 5).
      setval("b(0)", 2.0).       (Error 5).
          setval(a(-2), 2).      (Error 6).
      local(array(a(9), integer)),
          setval(a(9), 4).       (Error 6).
      setval(no_array(1), 2.0).  (Error 41).

See Also

getval / 2, decval / 1, incval / 1, setref / 2, erase_array / 1, array / 1, array / 2, variable / 1