environments and the contour model

26
Environments and the Contour Model

Upload: chester-christensen

Post on 01-Jan-2016

23 views

Category:

Documents


0 download

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 Presentation

TRANSCRIPT

Environments and the Contour Model

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

Function Evaluation

• So, X is bound in Y

• What about +?– Unbound

• When unbound lookup …

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

User-Environment

factorial (1)result 6

Primitive-Environment

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

a 10b 20

Primitive-Environment

Main’a 5b 6

F’a 6

main

fg

(3)

(8)

(1)

User-Environment

Primitive-Environment

Main’

F’a 6

G’b 7

a 10b 20main (1)

a 5b 6fg

(3)

(8)

User-Environment

Primitive-Environment

Main’

F’a 6

G’b 7

a

F’’6

a 10b 20main (1)

a 5b 6fg

(3)

(8)

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)

User-Environment

Primitive-Environment

Main’

F’a 6

a 10b 20main (1)

a 5b 6fg

(3)

(8)

User-Environment

Primitive-Environment

Main’

F’a 6

G’b 8

a 10b 20main (1)

a 5b 6fg

(3)

(8)

User-Environment

Primitive-Environment

Main’

F’a 6

G’b 8

a 8

F’’

a 10b 20main (1)

a 5b 6fg

(3)

(8)

User-Environment

Primitive-Environment

Main’F’

a 6

G’b 8

a 8

F’’

b 10

G’’

a 10b 20main (1)

a 5b 6fg

(3)

(8)