Evaluation: define MiroslavHruškaphoebe.inf.upol.cz/~hruskam/materials/define.pdf · Outline 1...

Preview:

Citation preview

Programming paradigms 1Evaluation: define

Miroslav Hruška

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

define

Eval[define,PG] = ’special form define’

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0] = . . .

Xx is a symbol.Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, x, 0] = . . .

Xx is a symbol.Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0] = . . .

Xx is a symbol.Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0] = . . .

Xx is a symbol.

Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0] = . . .

Xx is a symbol.Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0] = . . .

Xx is a symbol.Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

(define x 0)

Eval[(define x 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0] = . . .

Xx is a symbol.Eval[0,PG] = 0

x 7→PG 0

= ’undefined’

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.

Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’

Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

(define x (+ 1 1))

Eval[(define x (+ 1 1)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (+ 1 1)] = . . .

Xx is a symbol.Eval[(+ 1 1),PG] = . . .

Eval[+,PG] = ’pr. proc. of sum.’Eval[1,PG] = 1

Eval[1,PG] = 1

Apply[’pr. proc. of sum.’, 1, 1] = 2

x 7→PG 2

= ’undefined’

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define 0 x)

Eval[(define 0 x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, 0, x] = . . .

Error: define: ’0’ is not a symbol.

(define 0 x)

Eval[(define 0 x),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, 0, x] = . . .

Error: define: ’0’ is not a symbol.

(define 0 x)

Eval[(define 0 x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, 0, x] = . . .

Error: define: ’0’ is not a symbol.

(define 0 x)

Eval[(define 0 x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, 0, x] = . . .

Error: define: ’0’ is not a symbol.

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define x x)

Eval[(define x x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, x] = . . .

Xx is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define x x)

Eval[(define x x),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, x, x] = . . .

Xx is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define x x)

Eval[(define x x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, x] = . . .

Xx is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define x x)

Eval[(define x x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, x] = . . .

Xx is a symbol.

Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define x x)

Eval[(define x x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, x] = . . .

Xx is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define x x)

Eval[(define x x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, x] = . . .

Xx is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define y x)

Eval[(define y x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, x] = . . .

Xy is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define y x)

Eval[(define y x),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, y, x] = . . .

Xy is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define y x)

Eval[(define y x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, x] = . . .

Xy is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define y x)

Eval[(define y x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, x] = . . .

Xy is a symbol.

Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define y x)

Eval[(define y x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, x] = . . .

Xy is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

(define y x)

Eval[(define y x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, x] = . . .

Xy is a symbol.Eval[x,PG] = ...

Error: Symbol ’x’ does not have binding.

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define)

Eval[(define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, ] = . . .

Error: define: Incorrect number of arguments

(define)

Eval[(define),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, ] = . . .

Error: define: Incorrect number of arguments

(define)

Eval[(define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, ] = . . .

Error: define: Incorrect number of arguments

(define)

Eval[(define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, ] = . . .

Error: define: Incorrect number of arguments

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define x)

Eval[(define x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x] = . . .

Error: define: Incorrect number of arguments

(define x)

Eval[(define x),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, x] = . . .

Error: define: Incorrect number of arguments

(define x)

Eval[(define x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x] = . . .

Error: define: Incorrect number of arguments

(define x)

Eval[(define x),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x] = . . .

Error: define: Incorrect number of arguments

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define x 0 z)

Eval[(define x 0 z),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0, z] = . . .

Error: define: Incorrect number of arguments

(define x 0 z)

Eval[(define x 0 z),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, x, 0, z] = . . .

Error: define: Incorrect number of arguments

(define x 0 z)

Eval[(define x 0 z),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0, z] = . . .

Error: define: Incorrect number of arguments

(define x 0 z)

Eval[(define x 0 z),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, 0, z] = . . .

Error: define: Incorrect number of arguments

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, 0] = . . .

Xdefine is a symbol.Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, define, 0] = . . .

Xdefine is a symbol.Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, 0] = . . .

Xdefine is a symbol.Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, 0] = . . .

Xdefine is a symbol.

Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, 0] = . . .

Xdefine is a symbol.Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, 0] = . . .

Xdefine is a symbol.Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

(define define 0)

Eval[(define define 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, 0] = . . .

Xdefine is a symbol.Eval[0,PG] = 0

define 7→PG 0

= ’undefined’

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, define] = . . .

Xdefine is a symbol.Eval[define,PG] = ’special form define’define 7→PG ’special form define’= ’undefined’

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, define, define] = . . .

Xdefine is a symbol.Eval[define,PG] = ’special form define’define 7→PG ’special form define’= ’undefined’

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, define] = . . .

Xdefine is a symbol.Eval[define,PG] = ’special form define’define 7→PG ’special form define’= ’undefined’

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, define] = . . .

Xdefine is a symbol.

Eval[define,PG] = ’special form define’define 7→PG ’special form define’= ’undefined’

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, define] = . . .

Xdefine is a symbol.Eval[define,PG] = ’special form define’

define 7→PG ’special form define’= ’undefined’

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, define] = . . .

Xdefine is a symbol.Eval[define,PG] = ’special form define’define 7→PG ’special form define’

= ’undefined’

(define define define)

Eval[(define define define),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, define, define] = . . .

Xdefine is a symbol.Eval[define,PG] = ’special form define’define 7→PG ’special form define’= ’undefined’

Outline

1 define

2 (define x 0)

3 (define x (+ 1 1))

4 (define 0 x)

5 (define x x)

6 (define y x)

7 (define)

8 (define x)

9 (define x 0 z)

10 (define define 0)

11 (define define define)

12 (define x (define y 0))

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.

Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’

ApplyPG[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.

Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’

x 7→PG ’undefined’= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’

= ’undefined’

(define x (define y 0))

Eval[(define x (define y 0)),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, x, (define y 0)] = . . .

Xx is a symbol.Eval[(define y 0),PG] = . . .

Eval[define,PG] = ’special form define’ApplyPG

[’special form define’, y, 0] = . . .

Xy is a symbol.Eval[0,PG] = 0

y 7→PG 0

= ’undefined’x 7→PG ’undefined’= ’undefined’

Recommended