%%%% FILE: gv2.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 add(A, B, Sum) :- binding(A,ValA), binding(B,ValB), S is ValA + ValB, declare(Sum,S),!. sub(A, B, Sub) :- binding(A,ValA), binding(B,ValB), Subtr is ValA - ValB, declare(Sub,Subtr),!. mul(A, B, Prod) :- binding(A,ValA), binding(B,ValB), Product is ValA * ValB, declare(Prod,Product),!. div(A, B, Quote) :- binding(A,ValA), binding(B,ValB), Q is ValA / ValB, declare(Quote,Q),!. pow(A,B, Power) :- binding(A,ValA), binding(B,ValB), P is ValA ** ValB, declare(Power,P),!.