Presentation is loading. Please wait.

Presentation is loading. Please wait.

Class 19: Think Globally, Mutate Locally CS150: Computer Science

Similar presentations


Presentation on theme: "Class 19: Think Globally, Mutate Locally CS150: Computer Science"— Presentation transcript:

1 David Evans http://www.cs.virginia.edu/evans
Class 19: Think Globally, Mutate Locally CS150: Computer Science University of Virginia Computer Science David Evans

2 (define nest (lambda (x) (+ x x)))) > ((nest 3) 4) 8
Does the substitution model of evaluation tell us how to evaluate this?

3 Review: Names, Places, Mutation
A name is a place for storing a value. define creates a new place cons creates two new places, the car and the cdr (set! name expr) changes the value in the place name to the value of expr (set-car! pair expr) changes the value in the car place of pair to the value of expr (set-cdr! pair expr) changes the value in the cdr place of pair to the value of expr

4 Lambda and Places (lambda (x) …) also creates a new place named x
The passed argument is put in that place > (define x 3) > ((lambda (x) x) 4) 4 > x 3 x : 3 x : 4 How are these places different?

5 Location, Location, Location
Places live in frames An environment is a pointer to a frame We start in the global environment Application creates a new frame All frames except the global frame have exactly one parent frame, global frame has no parent

6 Environments > (define x 3)
+ : #<primitive:+> global environment null? : #<primitive:null?> x : 3 The global environment points to the outermost frame. It starts with all Scheme primitives. > (define x 3)

7 Procedures > (define double (lambda (x) (+ x x)))
+ : #<primitive:+> global environment null? : #<primitive:null?> x : 3 double: ?? > (define double (lambda (x) (+ x x)))

8 How to Draw a Procedure A procedure needs both code and an environment
We’ll see why soon We draw procedures like this: Environment pointer Code pointer parameters: x body: (+ x x)

9 How to Draw a Procedure (for artists only)
Environment pointer x (+ x x) Input parameters (in mouth) Procedure Body

10 Procedures > (define double (lambda (x) (+ x x)))
+ : #<primitive:+> global environment null? : #<primitive:null?> x : 3 double: > (define double (lambda (x) (+ x x))) parameters: x body: (+ x x)

11 Application Old rule: (Substitution model)
Apply Rule 2: Compounds. If the procedure is a compound procedure, evaluate the body of the procedure with each formal parameter replaced by the corresponding actual argument expression value.

12 New Rule: Application Construct a new frame, enclosed in the environment of this procedure Create places in that frame with the names of each parameter Put the values of the parameters in those places Evaluate the body in the new environment

13 global environment Construct a new frame, enclosed in the environment of this procedure Make places in that frame with the names of each parameter Put the values of the parameters in those places Evaluate the body in the new environment + : #<primitive:+> double: x : 3 parameters: x body: (+ x x) x : 4 > (double 4) 8 (+ 4 4) (+ x x) 8

14 (define nest (lambda (x) (+ x x)))) > ((nest 3) 4)
global environment + : #<primitive:+> nest: x : 3 ((lambda (x) (+ x x)) 4) parameter: x body: (lambda (x) (+ x x)) x : 3 x : 4 (+ x x)

15 Evaluation Rule 2 (Names)
If the expression is a name, it evaluates to the value associated with that name. To find the value associated with a name, look for the name in the frame pointed to by the evaluation environment. If it contains a place with that name, use the value in that place. If it doesn’t, evaluate the name using the frame’s parent environment as the new evaluation environment. If the frame has no parent, error (name is not a place).

16 evaluate-name (define (evaluate-name name env)
(if (null? env) (error “Undefined name: …”) (if (frame-contains name (get-frame env)) (lookup name (get-frame env)) (evaluate-name name (parent-environment (get-frame env)))))) Hmm…maybe we can define a Scheme interpreter in Scheme!

17 Exam 1 Return now Full comments will be posted on the web soon (and distributed on paper Monday)

18 Question 4 Draw a recursive transition network that describes the same language as the Backus-Naur Form grammar below produces starting from Expression: Expression ::= ( Expression ExpressionList ) Expression ::= Name ExpressionList ::= Expression ExpressionList ExpressionList ::= The terminals are Name and the parentheses.

19 Question 7 For any two functions f and g is it always the case that at least one of the two possibilities, f is O (g) or g is O (f ) is true? Prove or disprove using a precise argument. Bonus: what are the constraints on f and g needed to make this true? (Being monotonic is not quite enough!)

20 Charge Mutation makes evaluation rules more complicated
Environment diagrams quickly get complicated – but like substitution evaluations, just follow rules mechanically Monday, we’ll finish Colossus (don’t worry, the Allies still won)


Download ppt "Class 19: Think Globally, Mutate Locally CS150: Computer Science"

Similar presentations


Ads by Google