There was a problem when proofreading this page.
Steele and Sussman
54
The Art of the Interpreter
{Driver Loop with Side Effects} Pages 37, 53, 59
This driver loop (Figure N1) is similar to the one in Figure 8 (which didn't work). This one does work because, although top-level procedure definitions are closed in the current top-level environment, that environment is changed using a side effect when new definitions are made.
(DEFINE (DRIVER-LOOP-1 ENV FORM)
(COND ((ATOM FORM)
(DRIVER-LOOP ENV NIL (PRINT (EVAL FORM ENV))))
((EQ (CAR FORM) 'DEFINE)
(DRIVER-LOOP ENV
(EVSETQ (CAADR FORM)
(LIST '&PROCEDURE
(CDADR FORM)
(CADDR FORM)
ENV)
ENV)
(PRINT (CAADR FORM))))
(T (DRIVER-LOOP ENV NIL (PRINT (EVAL FORM ENV))))))
For EVAL and EVSETQ see Figure 11.
For LOOKUP1 see Figure 3 (not Figure 10, despite Figure 11!).
Figure N1
Implementation of DRIVER-LOOP
Using Side Effects