Lecture 26 The Metacircular Evaluator Eval Apply CS
- Slides: 30
Lecture 26: The Metacircular Evaluator Eval Apply CS 200: Computer Science David Evans University of Virginia 27 March 2002 CS 200 Spring 2002 http: //www. cs. virginia. edu/~evans Computer Science
Menu • Metacircular Evaluator Core Review • PS 6 – Adventure Game Nominations • Implementing Environments 27 March 2002 CS 200 Spring 2002 2
Environmental Model of Evaluation 1. To evaluate a combination, evaluate all the subexpressions and apply the value of the first subexpression to the values of the other subexpressions. 2. To apply a compound procedure to a set of arguments, evaluate the body of the procedure in a new environment. The parent of the new environment is the procedure’s environment; the frame is a new frame that contains places with the formal parameters bound to the arguments. 27 March 2002 CS 200 Spring 2002 3
meval (define (meval expr env) (cond ((self-evaluating? expr) ((variable? expr) (environment-lookup-name expr env)) ((lambda? expr) (make-procedure (lambda-parameters expr) (lambda-body expr) env)) ((application? expr) (mapply (meval (application-operator expr) env) (map (lambda (subexpr) (meval subexpr env)) (application-operands expr)))) (else (error "Unknown expression: " exp)))) 27 March 2002 CS 200 Spring 2002 4
mapply (define (mapply procedure operands) (cond ((primitive-procedure? procedure) (apply-primitive procedure operands)) ((compound-procedure? procedure) (meval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) operands (procedure-environment procedure)))) (else (error “Can’t apply: " procedure)))) 27 March 2002 CS 200 Spring 2002 5
PS 6 27 March 2002 CS 200 Spring 2002 6
Question 3 What is (make-object ‘book)? global environment (define make-object (lambda (name) (lambda (message) (if (eq? message ‘object? ) … ))))))) name : book parameters: message body: (if (eq? message …) 27 March 2002 CS 200 Spring 2002 7
What is ((make-object ‘book) ‘name)? global environment (define make-object (lambda (name) (lambda (message) (if (eq? message ‘object? ) … (if (eq? message 'name) (lambda (self) name) ))))))) name : book message : name parameters: self body: name 27 March 2002 CS 200 Spring 2002 8
What is (((make-object ‘book) ‘name) 3)? global environment (define make-object (lambda (name) (lambda (message) (if (eq? message ‘object? ) … (if (eq? message 'name) (lambda (self) name) ))))))) name : book message : parameters: self body: name 27 March 2002 CS 200 Spring 2002 name self : 3 name 9
Adventure Game Nominees 27 March 2002 CS 200 Spring 2002 10
The Nominees Are… • “Governor” • “Honor System” • “Hungry” • “Making the Band” 27 March 2002 CS 200 Spring 2002 11
Environments 27 March 2002 CS 200 Spring 2002 12
From Lecture 19: global environment (define nest (lambda (x) (+ x x)))) > ((nest 3) 4) + : #<primitive: +> x: 3 x : 3 nest: parameters: x body: (lambda (x) (+ x x)) (nest 3) (x) (+ x x)) 4) ((lambda x : 4 27 March 2002 (+ x x) CS 200 Spring 2002 13
Representing Environments An environment is a frame and a parent. x : 4 (define (make-new-environment frame env) (cons frame env)) 27 March 2002 CS 200 Spring 2002 14
Environment Procedures (define (first-frame env) (car env)) (define (enclosing-environment env) (cdr env)) 27 March 2002 CS 200 Spring 2002 15
Representing Frames A frame is a list of name-value pairs. y : 3 x : 4 (define (make-empty-frame) (list)) 27 March 2002 CS 200 Spring 2002 16
Environmental Model of Evaluation 1. To evaluate a combination, evaluate all the subexpressions and apply the value of the first subexpression to the values of the other subexpressions. 2. To apply a compound procedure to a set of arguments, evaluate the body of the procedure in a new environment. The parent of the new environment is the procedure’s environment; the frame is a new frame that contains places with the formal parameters bound to the arguments. 27 March 2002 CS 200 Spring 2002 17
mapply (define (mapply procedure operands) (cond ((primitive-procedure? procedure) (apply-primitive procedure operands)) ((compound-procedure? procedure) (meval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) operands (procedure-environment procedure)))) (else (error “Can’t apply: " procedure)))) 27 March 2002 CS 200 Spring 2002 18
extend-environment (define (extend-environment names values env) (make-new-environment (map (lambda (name value) (cons name value)) names values) env)) 27 March 2002 CS 200 Spring 2002 19
meval (define (meval expr env) (cond ((self-evaluating? expr) ((variable? expr) (environment-lookup-name expr env)) ((lambda? expr) (make-procedure (lambda-parameters expr) (lambda-body expr) env)) ((application? expr) (mapply (meval (application-operator expr) env) (map (lambda (subexpr) (meval subexpr env)) (application-operands expr)))) (else (error "Unknown expression: " exp)))) 27 March 2002 CS 200 Spring 2002 20
environment-lookup-name (define (environment-lookup-name env) (if (null? env) (error "No binding " name) (if (frame-contains? name (first-frame env)) (frame-lookup-name (first-frame env)) (environment-lookup-name (enclosing-environment env))))) 27 March 2002 CS 200 Spring 2002 21
frame procedures (define (frame-contains? name frame) (insertlg (lambda (var result) (if (eq? (car var) name) #t result)) frame #f)) (define (frame-lookup-name frame) (if (null? frame) (error "Name not found: " name) (if (eq? (car frame)) name) (cdr (car frame)) (frame-lookup-name (cdr frame))))) 27 March 2002 CS 200 Spring 2002 22
meval (define (meval expr env) (cond ((self-evaluating? expr) ((variable? expr) (environment-lookup-name expr env)) ((lambda? expr) (make-procedure (lambda-parameters expr) (lambda-body expr) env)) ((application? expr) (mapply (meval (application-operator expr) env) (map (lambda (subexpr) (meval subexpr env)) (application-operands expr)))) (else (error "Unknown expression: " exp)))) 27 March 2002 CS 200 Spring 2002 23
mapply (define (mapply procedure operands) (cond ((primitive-procedure? procedure) (apply-primitive procedure operands)) ((compound-procedure? procedure) (meval-sequence (procedure-body procedure) (extend-environment (procedure-parameters procedure) operands (procedure-environment procedure)))) (else (error “Can’t apply: " procedure)))) 27 March 2002 CS 200 Spring 2002 24
procedures (define (make-procedure parameters body environment) (list 'procedure parameters body environment)) (define (compound-procedure? expr) (tagged-list? expr 'procedure)) (define (procedure-parameters procedure) (cadr procedure)) (define (procedure-body procedure) (caddr procedure)) (define (procedure-environment procedure) (cadddr procedure)) (define (tagged-list? expr tag) (if (pair? expr) (eq? (car expr) tag) #f)) 27 March 2002 CS 200 Spring 2002 25
meval (define (meval expr env) (cond ((self-evaluating? expr) ((variable? expr) (environment-lookup-name expr env)) ((lambda? expr) (make-procedure (lambda-parameters expr) (lambda-body expr) env)) ((application? expr) (mapply (meval (application-operator expr) env) (map (lambda (subexpr) (meval subexpr env)) (application-operands expr)))) (else (error "Unknown expression: " exp)))) 27 March 2002 CS 200 Spring 2002 26
self-evaluating? (define (self-evaluating? expr) (or (number? expr) (string? expr) (primitive-procedure? expr))) 27 March 2002 CS 200 Spring 2002 27
Primitive Procedures (define (primitive-procedure? expr) (tagged-list? expr 'primitive-procedure)) (define (make-primitive-procedure expr) (list 'primitive-procedure expr)) (define (primitive-procedure) (cadr procedure)) 27 March 2002 CS 200 Spring 2002 28
the-global-environment (define the-empty-environment '()) (define the-global-environment (make-new-environment (list (cons '+ (make-primitive-procedure +)) (cons '* (make-primitive-procedure *)) (cons '- (make-primitive-procedure -)) ) the-empty-environment)) 27 March 2002 CS 200 Spring 2002 29
Charge • This is powerful: once we have an metacircular evaluator, we can easily make changes to the language! • Friday: quantum computing, variations on Scheme • PS 7: extend our Mini-Scheme evaluator to model quantum computing (loosely) 27 March 2002 CS 200 Spring 2002 30
- Metacircularity
- Cross apply vs outer apply
- 01:640:244 lecture notes - lecture 15: plat, idah, farad
- Extracollegiate
- External evaluator
- Ehtc governing system
- Function evaluator
- Nowc adalah
- External evaluator
- Excel formula evaluator
- Evaluator eol
- Marketing mix evaluator
- Veriforce oq evaluator
- Evaluator constanta
- Evaluator competencies
- Tonya insanity
- Initial eval
- Dr eval
- Navy fitrep block 41 examples
- Wveis ed eval
- Eval.depp.taocloud.org
- Dr eval
- Navy eval closing statement
- Block 40 chief eval
- Qualit eval
- Dr eval
- Eval command
- Navigator.getinstalledrelatedapps
- Bbs eval nibis
- Các châu lục và đại dương trên thế giới
- Bổ thể