% File: gv.pro % Implementation of a global variable ADT. % Essential functionality. declare(Variable,Value) :- assert(binding(Variable, Value)). display_bindings :- binding(Variable, Value), write(Variable), write(': '), write(Value), nl, fail. display_bindings. value_of(Variable, Value) :- binding(Variable, Value). bind(Variable, Value) :- retract(binding(Variable, _)), assert(binding(Variable, Value)). undeclare(Variable) :- retract(binding(Variable, _)). inc(Variable) :- value_of(Variable, X), NewValue is X + 1, bind(Variable, NewValue). dec(Variable) :- value_of(Variable, OldValue), NewValue is OldValue - 1, bind(Variable, NewValue). add(Variable, Number) :- value_of(Variable, OldValue), NewValue is OldValue + Number, bind(Variable, NewValue). sub(Variable, Number) :- value_of(Variable, OldValue), NewValue is OldValue - Number, bind(Variable, NewValue).