Presentation is loading. Please wait.

Presentation is loading. Please wait.

David Evans CS200: Computer Science University of Virginia Computer Science Lecture 19: Environments.

Similar presentations


Presentation on theme: "David Evans CS200: Computer Science University of Virginia Computer Science Lecture 19: Environments."— Presentation transcript:

1 David Evans http://www.cs.virginia.edu/~evans CS200: Computer Science University of Virginia Computer Science Lecture 19: Environments

2 27 February 2002CS 200 Spring 20022 Menu Exam 1 Environments Evaluation Rules

3 27 February 2002CS 200 Spring 20023 How does Exam 1 compare to other CS classes?

4 27 February 2002CS 200 Spring 20024 CS 101 (Spring 2001) 7. Why do programmers comment? (a) Give compiler extra instructions (b) Aid readability (c) To hide code for debugging purposes (d) (b) and (c) (e) none of the above “Correct” answer

5 27 February 2002CS 200 Spring 20025 Why Comment? To assign credit, blame or (non) liability (your name, copyright, disclaimer) To document external assumptions To remind you what you are doing (e.g., ;;; This is a bug!) To keep code readers entertained with jokes, poems, and stories To make sure your employer has to rehire you to fix the code (comments in foreign languages are especially effective)

6 27 February 2002CS 200 Spring 20026 CS 201 (Fall 2001) 5. [13 points total] Recursion. The “SuperCool” function is defined for positive integers greater than or equal to zero as: supercool(i) = supercool(i-1) * supercool(i-2); supercool(0) = 1; supercool(1) = 2; For example: supercool(2) = 2 * 1 = 2 supercool(3) = 2 * 2 = 4 supercool(4) = 4 * 2 = 8 supercool(5) = 8 * 4 = 32 Write a recursive function that calculates supercool. Your function must be recursive to receive any credit.

7 27 February 2002CS 200 Spring 20027 CS 415 (Spring 2002) 3. Define a function (zip op x y) that takes lists (x1 x2 x3....) and (y1 y2 y3...) and evaluated to the list ((op x1 y1) (op x2 y2) (op x3 y3)...). Examples: > (zip + '(1 2 3 4) '(5 10 15 20)) (6 12 18 24) > (zip list '(a b c d) '(6 7 8 9)) ((a 6) (b 7) (c 8) (d 9))

8 27 February 2002CS 200 Spring 20028 zip (define (zip f list1 list2) (if (null? list1) null (cons (f (car list1) (car list2)) (zip f (cdr list1) (cdr list2))))) (define zip map) (Easy way)

9 27 February 2002CS 200 Spring 20029 CS 655 (Spring 2001) 1. Mergering a. Write a Scheme procedure listadder that combines two lists by adding their elements. For example, (listadder '(3 1 3) '(3 4 2)) should produce (6 5 5). b. Write deeplistadder that works on nested lists also. For example, (deeplistadder '((1 2 (3 4)) 4) '((1 2 (3 4)) 6)) should produce ((2 4 (6 8)) 10).

10 27 February 2002CS 200 Spring 200210 listadder (define (listadder list1 list2) (if (null? list1) '() (cons (+ (car list1) (car list2)) (listadder (cdr list1) (cdr list2)))))

11 27 February 2002CS 200 Spring 200211 deeplistadder (define (deeplistadder list1 list2) (if (null? list1) list1 (if (list? (car list1)) (cons (deeplistadder (car list1) (car list2)) (deeplistadder (cdr list1) (cdr list2))) (cons (+ (car list1) (car list2)) (deeplistadder (cdr list1) (cdr list2))))))

12 27 February 2002CS 200 Spring 200212 deeplistmerger (define (deeplistmerger f list1 list2) (if (null? list1) list1 (if (list? (car list1)) (cons (deeplistmapper f (car list1) (car list2)) (deeplistmapper f (cdr list1) (cdr list2))) (cons (f (car list1) (car list2)) (deeplistmapper f (cdr list1) (cdr list2))))))

13 27 February 2002CS 200 Spring 200213 PhD Qualifying Exam Using any language you want, write a program that reverses a list?

14 27 February 2002CS 200 Spring 200214 reverse A recursive definition: –Reversing an empty list is an empty list –To reverse a non-empty list, put the first element of the list at the end of the result of reversing the rest of the list (a. rest)  (reverse rest). a 1 2 3 4  (reverse 2 3 4) 1  (reverse 3 4) 2 1  (reverse 4) 3 2 1  (reverse ) 4 3 2 1  4 3 2 1

15 27 February 2002CS 200 Spring 200215 reverse try 1: (define (reverse lst) (if (null? lst) lst (cons (reverse (cdr lst)) (car lst)))) (reverse ‘(1 2)) ((lambda (lst) (if (null? lst) lst (cons (reverse (cdr lst)) (car lst)))) ‘(1 2)) (if (null? ‘(1 2)) ‘(1 2) (cons (reverse (cdr ‘(1 2))) (car ‘(1 2))))) (cons (reverse ‘(2)) 1) (cons 2 1) (2. 1) Not the list (2 1)

16 27 February 2002CS 200 Spring 200216 reverse (define (reverse lst) (if (null? lst) lst (append (reverse (cdr lst)) (list (car lst))))) (n)(n) n times reverse is  (n 2 ) Challenge: Define a reverse procedure that is  (n) without using mutation

17 27 February 2002CS 200 Spring 200217 Environments

18 27 February 2002CS 200 Spring 200218 (define nest (lambda (x) (+ x x)))) > ((nest 3) 4) 8 Does the substitution model of evaluation tell us how to evaluate this?

19 27 February 2002CS 200 Spring 200219 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

20 27 February 2002CS 200 Spring 200220 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 How are these places different? x : 3 x : 4

21 27 February 2002CS 200 Spring 200221 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 one parent frame

22 27 February 2002CS 200 Spring 200222 Environments global environment > (define x 3) + : # null? : # The global environment points to the outermost frame. It starts with all Scheme primitives. x : 3

23 27 February 2002CS 200 Spring 200223 Procedures global environment > (define double (lambda (x) (+ x x))) + : # null? : # double: ?? x : 3

24 27 February 2002CS 200 Spring 200224 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)

25 27 February 2002CS 200 Spring 200225 Procedures global environment > (define double (lambda (x) (+ x x))) + : # null? : # double: x : 3 parameters: x body: (+ x x)

26 27 February 2002CS 200 Spring 200226 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.

27 27 February 2002CS 200 Spring 200227 Application 1.Construct a new frame, enclosed in the environment of this procedure 2.Make places in that frame with the names of each parameter 3.Put the values of the parameters in those places 4.Evaluate the body in the new environment

28 27 February 2002CS 200 Spring 200228 1.Construct a new frame, enclosed in the environment of this procedure 2.Make places in that frame with the names of each parameter 3.Put the values of the parameters in those places 4.Evaluate the body in the new environment global environment > (double 4) 8 + : # double: x : 3 parameters: x body: (+ x x) x : 4 (+ x x) (+ 4 4) 8

29 global environment (nest 3) + : # nest: x : 3 parameters: x body: (lambda (x) (+ x x)) x : 3 (define nest (lambda (x) (+ x x)))) > ((nest 3) 4) ((lambda (x) (+ x x)) 4) x : 4 (+ x x)

30 27 February 2002CS 200 Spring 200230 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).

31 27 February 2002CS 200 Spring 200231 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!

32 27 February 2002CS 200 Spring 200232 Charge Mutation makes evaluation rules more complicated Environment diagrams quickly get complicated – but like substitution evaluations, just follow rules mechanically Read SICP Ch 3 (through p. 266) Get cracking on PS5 –Lab hours – Monday 8-9:30 After Spring Break – we will define our own Scheme interpreter!


Download ppt "David Evans CS200: Computer Science University of Virginia Computer Science Lecture 19: Environments."

Similar presentations


Ads by Google