1/*
    2 * Package for mutable variables / cells.
    3 * There are b(ackatrackable) and n(on-)b(acktrackable) variants.
    4 */
    5:- module(mutable_variables,
    6          [new_bvar/2
    7	  ,is_bvar/1
    8          ,b_put/2
    9          ,b_get/2
   10          ,new_nbvar/2
   11	  ,is_nbvar/1
   12          ,nb_put/2
   13          ,nb_get/2
   14          ]).   15
   16new_bvar(InitialValue,Var) :-
   17  var(Var),
   18  Var = bvar(InitialValue).
   19
   20new_nbvar(InitialValue,Var) :-
   21  var(Var),
   22  Var = nbvar(InitialValue).
   23
   24is_bvar(bvar(_)).
   25
   26is_nbvar(nbvar(_)).
   27
   28b_put(Var,Value) :-
   29  Var = bvar(_),
   30  setarg(1,Var,Value).
   31
   32nb_put(Var,Value) :-
   33  Var = nbvar(_),
   34  nb_setarg(1,Var,Value).
   35
   36b_get(bvar(Value),Value).
   37
   38nb_get(nbvar(Value),Value)