environments and the contour model
DESCRIPTION
Environments and the Contour Model. Environments. Consist of: frames chained together. Frames are:. Global Environment. Primitives. Global user declarations. Function Evaluation. > (Y 2). Function Evaluation. So, X is bound in Y What about +? Unbound When unbound lookup …. - PowerPoint PPT PresentationTRANSCRIPT
Environments
Consist of: frames chained together
Frames are: Name Value
X 2
Y (lambda (x) (+ x 2))
Z “testing”
… …
Global Environment
Name Value
+ …
…
Name Value
X 2
Y (lambda (x) (+ x 2))
Z “testing”
… …
Primitives
Global user declarations
Function Evaluation> (Y 2)
Name Value
+ …
…
Name Value
X 2
Y (lambda (x) (+ x 2))
Z “testing”
… …
Name Value
X 2
…
Traverse Frames
Name Value
+ …
…
Name Value
X 2
Y (lambda (x) (+ x 2))
Z “testing”
… …
Name Value
X 2
…
What about multiple bindings?
(define x 3)(define y 2)(define z (lambda (x) (let ((y 3)) (+ x y))))(z 4)
Name Value
+
… …Name Value
X 3
Y 2
Z
Name Value
X 4
X and Y multiply defined. Always use first binding!
Y 3
Passing Mechanism
• By value:– Copy of argument is value for formal argument
• Pointer in the case of lists
• Copy of string or integer for primitive types
Primitive-EnvironmentUser-Environment
bsquare
5(2)
line 1: (define b 5) line 2: (define (square num) line 3: (* num num)) line 4: (define result (square 5))
Points at environment in which defined
Points at line where defined
Points at line where execution snapshot created
User-Environment
bsquare
5(2)
square’num 5
Primitive-Environment
line 1: (define b 5) line 2: (define (square num) line 3: (* num num)) line 4: (define result (square 5))
Points at line where function execution ends
Return pointer
Primitive-EnvironmentUser-Environment
bsquare
52
result 25
line 1: (define b 5) line 2: (define (square num) line 3: (* num num)) line 4: (define result (square 5))
Primitive-EnvironmentUser-Environment
factorial (1)
line 1: (define (factorial n) line 2: (if (< n 2) line 3: 1 line 4: (* n (factorial (- n 1)))))
line 5: (define result (factorial 3))
Primitive-EnvironmentUser-Environment
factorial (1)
factorial’n 3
line 1: (define (factorial n) line 2: (if (< n 2) line 3: 1 line 4: (* n (factorial (- n 1))))) line 5: (define result (factorial 3))
Primitive-EnvironmentUser-Environment
factorial (1)
factorial’n 3
factorial’’n 2
line 1: (define (factorial n) line 2: (if (< n 2) line 3: 1 line 4: (* n (factorial (- n 1))))) line 5: (define result (factorial 3))
Primitive-EnvironmentUser-Environment
factorial (1)
factorial’n 3
factorial’’n 2
factorial’’’n 1
line 1: (define (factorial n) line 2: (if (< n 2) line 3: 1 line 4: (* n (factorial (- n 1))))) line 5: (define result (factorial 3))
Warning Simplified Diagrams!
• Next slides are simplified:– Lambdas for a, b, etc not present
Main’
a 5b 6fg
(3)
(8)
Extra environment frame is for the let inside of main.
Remember:(let ((a 0) (b 0)) <body>)
is equivalent to ((lambda (a b) <body>) 0 0)
CodeLine 1: (define (main) Line 2: (let (( a 0) (b 0)) Line 3: (define (f) Line 4: (let ((a 0)) Line 5: (set! a b) Line 6: (writeln "in f: A and B are - " a b) Line 7: (g))) Line 8: (define (g) Line 9: (let ((b 0)) Line10: (set! b (+ a 2)) Line11: (writeln "in g: A and B are - " a b) Line12: (f))) Line13: (set! a 5) Line14: (set! b 6) Line15: (f))) Line16: (define a 10) Line17: (define b 20) Line18: (main)
User-Environment
Primitive-Environment
Main’
F’a 6
G’b 7
a 6
F’’b 7
G’’
a 10b 20main (1)
a 5b 6fg
(3)
(8)