Write a procedure (make-stack) that produces independent stack
objects, using a message-passing style, e.g.
(define stack1 (make-stack))
(define stack2 (make-stack))
Write procedures to manipulate stacks, e.g.
(stack1 'empty?) ==> boolean
(stack1 'push! item) ==> pushes item on top of stack
(stack1 'top) ==> returns top element of stack,
leaves stack unchanged
(stack1 'pop!) ==> throws away top element of stack
(stack1 'print) ==> prints some representation of the
stack from top to bottom, enclosed in brackets
Your tests should include making several stacks, pushing on one what is popped from the other, attempts to pop from an empty stack etc.
Also write a procedure to reverse a list by using two stacks.