% implementing stacks in Prolog is easy by using the data base :-dynamic(stack_top/2). new_stack(S):-retract(stack_top(S,_)), fail. empty_stack(S):-not(stack_top(S,_)). push(S,I):-asserta(stack_top(S, I)). top(S,I):-stack_top(S,I), !. pop(S,I):-retract(stack_top(S,I)).