6.001 FT04 - recitation 18 problems (define (make-stack) (let ((vals '())) (lambda (message) (case message ((EMPTY?) (null? vals)) ((CLEAR) (set! vals '()) 'cleared) ((PEEK) (if (null? vals) (error "stack underflow") (car vals))) ((PUSH) (lambda (val) (set! vals (cons val vals)) 'pushed)) ((POP) (if (null? vals) (error "stack underflow") (let ((oldval (car vals))) (set! vals (cdr vals)) oldval))) (else (error "stack can't" message)))))) We will use (for-each proc lst) which applies proc to each element of the list lst in order, returning an unspecified value. (define (push-all stack lst) (for-each (stack 'PUSH) lst) stack) (define (pop-all stack) (if (stack 'EMPTY?) '() (let ((val (stack 'POP))) (cons val (pop-all stack))))) (define s (make-stack)) ((s 'PUSH) 1) ((s 'PUSH) 2) ((s 'PUSH) 3) (pop-all s) (define (reverse lst) (pop-all (push-all (make-stack) lst))) (reverse '(1 2 3))