david evans cs.virginia/evans

34
David Evans http://www.cs.virginia.edu/ evans CS200: Computer Science University of Virginia Computer Science Lecture 17: Environmen ts

Upload: orrin

Post on 30-Jan-2016

23 views

Category:

Documents


0 download

DESCRIPTION

Lecture 17: Environments. David Evans http://www.cs.virginia.edu/evans. CS200: Computer Science University of Virginia Computer Science. Menu. Environments Evaluation Rules Exam 1. Environments. (define nest (lambda (x) (lambda (x) (+ x x)))) > ((nest 3) 4) 8. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: David Evans cs.virginia/evans

David Evanshttp://www.cs.virginia.edu/evans

CS200: Computer ScienceUniversity of VirginiaComputer Science

Lecture 17: Environments

Page 2: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 2

Menu

• Environments

• Evaluation Rules

• Exam 1

Page 3: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 3

Environments

Page 4: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 4

(define nest (lambda (x) (lambda (x) (+ x x))))> ((nest 3) 4)8

Does the substitution model of evaluation tell us how to evaluatethis?

Page 5: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 5

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

Page 6: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 6

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> x3

How are theseplaces different?

x : 3

x : 4

Page 7: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 7

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

Page 8: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 8

Environments

globalenvironment

> (define x 3)

+ : #<primitive:+>null? : #<primitive:null?>

The global environment points to the outermost frame. It starts with all Scheme primitives.

x : 3

Page 9: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 9

Procedures

globalenvironment

> (define double (lambda (x) (+ x x)))

+ : #<primitive:+>null? : #<primitive:null?>

double: ??

x : 3

Page 10: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 10

How to Draw a Procedure

• A procedure needs both code and an environment– We’ll see why soon

• We draw procedures like this:Environmentpointer

Code pointer

parameters: xbody: (+ x x)

Page 11: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 11

Procedures

globalenvironment

> (define double (lambda (x) (+ x x)))

+ : #<primitive:+>null? : #<primitive:null?>

double:

x : 3

parameters: xbody: (+ x x)

Page 12: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 12

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.

Page 13: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 13

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

Page 14: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 14

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

globalenvironment

> (double 4)8

+ : #<primitive:+>

double: x : 3

parameters: xbody: (+ x x)

x : 4

(+ x x)(+ 4 4)8

Page 15: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 15

globalenvironment

(nest 3)

+ : #<primitive:+>

nest: x : 3

parameters: xbody: (lambda (x) (+ x x))

x : 3

(define nest (lambda (x) (lambda (x) (+ x x))))> ((nest 3) 4)

((lambda (x) (+ x x)) 4)x : 4

(+ x x)

Page 16: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 16

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).

Page 17: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 17

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!

Page 18: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 18

How does CS200 compare to other CS classes?

Page 19: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 19

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

Page 20: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 20

Why Comment?• To assign credit, blame or (non) liability

/* I was drunk when I wrote this. */

• To document external assumptions (e.g., this parameter must be a sorted list)

• To remind you what you are doing (; 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)

• Because you are taking a course where programs are judged based on the number of comments in it, not the clarity and economy of your code

Page 21: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 21

CS 201: Software Development Methods (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 = 2supercool(3) = 2 * 2 = 4supercool(4) = 4 * 2 = 8supercool(5) = 8 * 4 = 32

Write a recursive function that calculates supercool. Your function must be recursive to receive any credit.

Page 22: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 22

CS 415: Programming Languages (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))

Page 23: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 23

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)

Page 24: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 24

CS588: Cryptology

QPIV AUH DKV UA PKEXHE QA ATHU QPKU QPH AQPHE AUH - DIVH CZO

THIS ONE WAS NO HARDER TO OPEN THAN THE OTHER ONE - WISE GUY (From Safecracker Meets Safecracker in “Surely You're Joking, Mr. Feynman!: Adventures of a Curious Character”, Richard P. Feynman.)

Problem Set 1, question 1:

Page 25: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 25

CS588: Cryptology

The following statements were taken from Microsoft's recently released "Safe Internet: Microsoft Privacy & Security Fundamentals" web site and their "The Ten Immutable Laws of Security" page). For each of these statements, indicate whether the statement is true, misleading or an outright falsehood. Support your answer with 1-3 sentences. An incorrect, but well-supported answer is worth more credit that a correct, poorly-supported answer. Some parts of the statements are bold to focus your attention.

a. (7) Unless your e-mail application provides encryption features such as the use of digital signatures, your messages are about as private as a letter sent in an unsealed envelope.

Midterm, last question:

Page 26: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 26

CS588: Cryptology

Outright Falsehood. Digital signatures (like physicial signatures) provide authenticity, not privacy. Anyone can read a signed message by decrypting using the signer's public key.

Midterm, last question:

Page 27: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 27

CS 655 (Spring 2001)

1. Mergeringa. 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).

Page 28: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 28

listadder

(define (listadder list1 list2) (if (null? list1) '() (cons (+ (car list1) (car list2)) (listadder (cdr list1) (cdr list2)))))

Page 29: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 29

PhD Qualifying Exam

Write a procedure posfilter that takes a list of integers as input and evaluates to the list with all the non-positive elements removed. For example, (posfilter (list 34 -2 50 0 23)) evaluates to (34 50 23)

(define posfilter enronize)

Page 30: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 30

If you don’t already have enronize…

(define (posfilter lst) (if (null? lst) null (if (> (car lst) 0) (cons (car lst) (posfilter (cdr lst))) (posfilter (cdr lst)))))

If you got a 7 or better on question 5, you did better than more than half of our PhD students!

(18 of you got 10/10)

Page 31: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 31

Part d (of that question)

Write a procedure filter that takes a list of integers and a filter function as input and evaluates to the list with only the elements for which the filter function evaluates to true.

(define (filter lst f) (if (null? lst) null (if (f (car lst)) (filter (cdr lst)) (cons (car lst) (filter (cdr lst))))))

Page 32: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 32

make-enronize

Why couldn’t I ask the PhD students to implement make-enronize?

Page 33: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 33

PhD Qualifying Exama. Define a procedure that takes a

binary tree as input, and produces as output the mirror image of that tree, swapping the left and right sides at every node.

b. How much work is your procedure?12 of you did better on this than our best PhD student this year did!

Page 34: David Evans cs.virginia/evans

26 February 2003 CS 200 Spring 2003 34

Charge

• No class Friday – enjoy your “break”!– But that doesn’t mean you have no work to do…

• Mutation makes evaluation rules more complicated

• Environment diagrams quickly get complicated – but like substitution evaluations, just follow rules mechanically

• Don’t wait until after Spring Break to start PS5

• Finish GEB part I before next class.