20 Evaluator Code
20 Evaluator Code
((lambda? exp)
env))
env))
1
6.001 Metacircular Evaluator 2
Representing Expressions
(define (tagged-list? exp tag)
(and (pair? exp) (eq? (car exp) tag)))
(caddr exp)
Representing procedures
(define (make-procedure parameters body env)
(list ’procedure parameters body env))
(define (compound-procedure? exp)
(tagged-list? exp ’procedure))
(define (procedure-parameters p) (list-ref p 1))
(define (procedure-body p) (list-ref p 2))
(define (procedure-environment p) (list-ref p 3))
Representing environments
;; Implement environments as a list of frames; parent environment is
(env-loop env))
(env-loop env))
(frame-values frame))))
(list ’+ +)
(list ’= =)
(list ’* *)
))
(define (setup-environment)
(let ((initial-env (extend-environment (primitive-procedure-names)
(primitive-procedure-objects)
the-empty-environment)))
initial-env))
(announce-output output-prompt)
(display output)))
(driver-loop))