[ 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.

ElemSpec
  Atom (non-logical variable) or fully instantiated compound term with positive integer arguments (array element specification).
Value
  Prolog term.

## Description

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 context 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

- setval(++, ?) is det

### Modules

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

### Exceptions

(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.

## Examples

    Success:
          local(array(a(4,3))),
              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").

    Error:
          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).
          local(array(a(4))),
              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