%File: arithmetic.pro %Implementation of arithmetic functions. %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, _)). %Crafted nondestructive arithmetic programs. add(Variable1, Variable2, Answer) :- value_of(Variable1, Value1), value_of(Variable2, Value2), NewValue is Value1 + Value2, declare(Answer, NewValue). sub(Variable1, Variable2, Answer) :- value_of(Variable1, Value1), value_of(Variable2, Value2), NewValue is Value1 - Value2, declare(Answer, NewValue). mul(Variable1, Variable2, Answer) :- value_of(Variable1, Value1), value_of(Variable2, Value2), NewValue is Value1 * Value2, declare(Answer, NewValue). div(Variable1, Variable2, Answer) :- value_of(Variable1, Value1), value_of(Variable2, Value2), NewValue is Value1 / Value2, declare(Answer, NewValue). exp(Variable1, Variable2, Answer) :- value_of(Variable1, Value1), value_of(Variable2, Value2), NewValue is Value1 ^ Value2, declare(Answer, NewValue).