previous | index | next

The top-minus Procedure

top-minus should also guard against bad offsets.
     (define top-minus
       (lambda (ra-stack offset)
	 (cond ((< offset 0)
		(error "TOP-MINUS: offset < 0" offset))
	       ((>= offset (height ra-stack))
		(error
		 "TOP-MINUS: offset too large for stack"
		 offset (height ra-stack)))
	       (else
		(vector-ref (cells ra-stack) (- (height ra-stack)
						(+ offset 1)))))))
top-minus relies on the following invariant implied by this representation:
The elements of ra-stack, listed from the bottom of the stack to its top, are in cells[0], cells[1], ..., cells[height-1].
The RA-stack mutators push! and pop! must be sure to maintain this invariant.

previous | index | next