%%%% FILE: gv1.pro %%%% LINE: very simple global variable ADT %% Essential functionality declare(Var,Val) :- retract(binding(Var,_)), assert(binding(Var,Val)),!. declare(Var,Val) :- assert(binding(Var,Val)),!. bind(Variable, Value) :- retract(binding(Variable,Value)), assert(binding(Variable,Value)),!. valueof(Variable,Value) :- binding(Variable,Value),!. undeclare(Var,_) :- retract(binding(Var,_)),!. %% Binding display functionality bindings :- binding(Variable,Value), write(Variable),write(' -> '),write(Value), nl, fail. bindings. %% Arithmatic operator functionality inc(Variable) :- retract(binding(Variable,Value)), NewValue is Value + 1, assert(binding(Variable,NewValue)),!. dec(Variable) :- retract(binding(Variable,Value)), NewValue is Value - 1, assert(binding(Variable,NewValue)),!. add(Variable, Number) :- retract(binding(Variable,Value)), NewValue is Value + Number, assert(binding(Variable,NewValue)),!. sub(Variable, Number) :- retract(binding(Variable,Value)), NewValue is Value + Number, assert(binding(Variable,NewValue)),!. mul(Variable, Number) :- retract(binding(Variable,Value)), NewValue is Value * Number, assert(binding(Variable,NewValue)),!. div(Variable, Number) :- retract(binding(Variable,Value)), NewValue is Value / Number, assert(binding(Variable,NewValue)),!.