Transcript Slides

Lecture 17:
Environments
CS200: Computer Science
University of Virginia
Computer Science
David Evans
http://www.cs.virginia.edu/evans
Menu
• Environments
• Evaluation Rules
• Exam 1
26 February 2003
CS 200 Spring 2003
2
Environments
26 February 2003
CS 200 Spring 2003
3
(define nest
(lambda (x)
(lambda (x)
(+ x x))))
> ((nest 3) 4)
8
26 February 2003
CS 200 Spring 2003
Does the
substitution model
of evaluation tell
us how to evaluate
this?
4
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
26 February 2003
CS 200 Spring 2003
5
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
26 February 2003
x:3
x:4
How are these
places different?
CS 200 Spring 2003
6
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
26 February 2003
CS 200 Spring 2003
7
Environments
global
environment
+ : #<primitive:+>
null? : #<primitive:null?>
x:3
The global environment points to the outermost
frame. It starts with all Scheme primitives.
> (define x 3)
26 February 2003
CS 200 Spring 2003
8
Procedures
global
environment
+ : #<primitive:+>
null? : #<primitive:null?>
x:3
double: ??
> (define double (lambda (x) (+ x x)))
26 February 2003
CS 200 Spring 2003
9
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)
26 February 2003
CS 200 Spring 2003
10
Procedures
global
environment
+ : #<primitive:+>
null? : #<primitive:null?>
x:3
double:
> (define double
(lambda (x) (+ x x)))
26 February 2003
CS 200 Spring 2003
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.
26 February 2003
CS 200 Spring 2003
12
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
26 February 2003
CS 200 Spring 2003
13
1.
2.
3.
4.
Construct a new frame, global
environment
enclosed in the
environment of this
+ : #<primitive:+>
procedure
Make places in that
double:
x:3
frame with the names of
each parameter
Put the values of the
parameters in those
parameters: x
places
body: (+ x x)
Evaluate the body in the
new environment
x :4
> (double 4)
(+
x)
8 4x 4)
8
26 February 2003
CS 200 Spring 2003
14
global
environment
(define nest
(lambda (x)
(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
26 February 2003
(+ x x)
CS 200 Spring 2003
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).
26 February 2003
CS 200 Spring 2003
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!
26 February 2003
CS 200 Spring 2003
17
How does CS200
compare to other CS classes?
26 February 2003
CS 200 Spring 2003
18
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)
“Correct” answer
(e) none of the above
26 February 2003
CS 200 Spring 2003
19
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
26 February 2003
CS 200 Spring 2003
20
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 = 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.
26 February 2003
CS 200 Spring 2003
21
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))
26 February 2003
CS 200 Spring 2003
22
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)
26 February 2003
CS 200 Spring 2003
(Easy way)
23
CS588: Cryptology
Problem Set 1, question 1:
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.)
26 February 2003
CS 200 Spring 2003
24
CS588: Cryptology
Midterm, last question:
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.
26 February 2003
CS 200 Spring 2003
25
CS588: Cryptology
Midterm, last question:
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.
26 February 2003
CS 200 Spring 2003
26
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).
26 February 2003
CS 200 Spring 2003
27
listadder
(define (listadder list1 list2)
(if (null? list1) '()
(cons (+ (car list1) (car list2))
(listadder (cdr list1)
(cdr list2)))))
26 February 2003
CS 200 Spring 2003
28
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)
26 February 2003
CS 200 Spring 2003
29
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)
26 February 2003
CS 200 Spring 2003
30
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))))))
26 February 2003
CS 200 Spring 2003
31
make-enronize
Why couldn’t I ask the PhD students to
implement make-enronize?
26 February 2003
CS 200 Spring 2003
32
PhD Qualifying Exam
a. 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!
26 February 2003
CS 200 Spring 2003
33
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.
26 February 2003
CS 200 Spring 2003
34