
/* --------------------------------------- */
/*  Generic Environment Related Predicates */
/* --------------------------------------- */

init_env([stack_pointer/0]).

pop(Vars,Top,NVars) :- lookup(stack_pointer,Vars,SP), SP<0,!, 
   NSP is SP+1, lookup(SP,Vars,Top),
   store(Vars,stack_pointer,NSP,NVars).
pop(E,_,_) :- print('*** Could not pop from stack: '),print(E),nl,fail.

push(Vars,X,NVars) :- lookup(stack_pointer,Vars,SP),
   NSP is SP-1,
   store(Vars,stack_pointer,NSP,NV1),
   store(NV1,NSP,X,NVars).


store(Vars,Key,Value,NVars) :-
    update(Vars,Key,Value,NVars).
    
load(Key,Env,Val) :- lookup(Key,Env,Val).

/* --------------------------------------- */
