Not really what happens in the computer. The Environment Model. (set-car! l 'z) (car l) z

Similar documents
Basic Scheme February 8, Compound expressions Rules of evaluation Creating procedures by capturing common patterns

Scheme in Scheme: The Metacircular Evaluator Eval and Apply

Why do we need an interpreter? SICP Interpretation part 1. Role of each part of the interpreter. 1. Arithmetic calculator.

Evaluating Scheme Expressions

Fall Semester, The Metacircular Evaluator. Today we shift perspective from that of a user of computer langugaes to that of a designer of

CS61A Discussion Notes: Week 11: The Metacircular Evaluator By Greg Krimer, with slight modifications by Phoebus Chen (using notes from Todd Segal)

Computer Science 21b (Spring Term, 2015) Structure and Interpretation of Computer Programs. Lexical addressing

regsim.scm ~/umb/cs450/ch5.base/ 1 11/11/13

Every language has its own scoping rules. For example, what is the scope of variable j in this Java program?

Procedural abstraction SICP Data abstractions. The universe of procedures forsqrt. Procedural abstraction example: sqrt

Streams, Delayed Evaluation and a Normal Order Interpreter. CS 550 Programming Languages Jeremy Johnson

bindings (review) Topic 18 Environment Model of Evaluation bindings (review) frames (review) frames (review) frames (review) x: 10 y: #f x: 10

CS61A Summer 2010 George Wang, Jonathan Kotker, Seshadri Mahalingam, Eric Tzeng, Steven Tang

Lecture 4. Part 1. More on "First-Class" Procedures

UNIVERSITY of CALIFORNIA at Berkeley Department of Electrical Engineering and Computer Sciences Computer Sciences Division

6.184 Lecture 4. Interpretation. Tweaked by Ben Vandiver Compiled by Mike Phillips Original material by Eric Grimson

Below are example solutions for each of the questions. These are not the only possible answers, but they are the most common ones.

April 2 to April 4, 2018

Announcements. The current topic: Scheme. Review: BST functions. Review: Representing trees in Scheme. Reminder: Lab 2 is due on Monday at 10:30 am.


Building up a language SICP Variations on a Scheme. Meval. The Core Evaluator. Eval. Apply. 2. syntax procedures. 1.

CS61A Notes Week 6: Scheme1, Data Directed Programming You Are Scheme and don t let anyone tell you otherwise

CSE413 Midterm. Question Max Points Total 100

6.037 Lecture 4. Interpretation. What is an interpreter? Why do we need an interpreter? Stages of an interpreter. Role of each part of the interpreter

Summer 2017 Discussion 10: July 25, Introduction. 2 Primitives and Define

Discussion 4. Data Abstraction and Sequences

Functional Programming. Pure Functional Programming

Using Symbols in Expressions (1) evaluate sub-expressions... Number. ( ) machine code to add

An introduction to Scheme

Spring 2018 Discussion 7: March 21, Introduction. 2 Primitives

ENVIRONMENT MODEL: FUNCTIONS, DATA 18

Fall 2017 Discussion 7: October 25, 2017 Solutions. 1 Introduction. 2 Primitives

CS61A Midterm 2 Review (v1.1)

Berkeley Scheme s OOP

STREAMS 10. Basics of Streams. Practice with Streams COMPUTER SCIENCE 61AS. 1. What is a stream?

CS 61A Discussion 8: Scheme. March 23, 2017

Parsing Scheme (+ (* 2 3) 1) * 1

Normal Order (Lazy) Evaluation SICP. Applicative Order vs. Normal (Lazy) Order. Applicative vs. Normal? How can we implement lazy evaluation?

Discussion 12 The MCE (solutions)

SCHEME 8. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. March 23, 2017

Discussion 11. Streams

University of Massachusetts Lowell

Programming Project #4: A Logo Interpreter Summer 2005

CSCE 531, Spring 2015 Final Exam Answer Key

Functional Programming

Chapter 1. Fundamentals of Higher Order Programming

6.001 Notes: Section 8.1


SCHEME 7. 1 Introduction. 2 Primitives COMPUTER SCIENCE 61A. October 29, 2015

DRAWING ENVIRONMENT DIAGRAMS

CSCC24 Functional Programming Scheme Part 2

Comp 311: Sample Midterm Examination

SCHEME AND CALCULATOR 5b

C311 Lab #3 Representation Independence: Representation Independent Interpreters

Faced with the choice between changing one s mind and proving that there is no need to do so, almost everyone gets busy on the proof.

An Introduction to Scheme

Python in 10 (50) minutes

Test 1 Summer 2014 Multiple Choice. Write your answer to the LEFT of each problem. 5 points each 1. Preprocessor macros are associated with: A. C B.

Write a procedure powerset which takes as its only argument a set S and returns the powerset of S.

6.037 Lecture 7B. Scheme Variants Normal Order Lazy Evaluation Streams

Computer Science 21b: Structure and Interpretation of Computer Programs (Spring Term, 2004)

CSE 413 Midterm, May 6, 2011 Sample Solution Page 1 of 8

Principles of Programming Languages

6.001: Structure and Interpretation of Computer Programs

An Explicit Continuation Evaluator for Scheme

Principles of Programming Languages Topic: Scope and Memory Professor Louis Steinberg Fall 2004

Functional Languages. CSE 307 Principles of Programming Languages Stony Brook University

Lecture 2: SML Basics

Class Structure. Prerequisites

Today's Topics. Last Time Modelling Scopes and Visibility The Run Stack, the Dynamic Pointer Stack, the Display (LL,ON) addressing

Defining Recursive Procedures. Lecture 8: Recursing Lists. list? Tracing list? sumlist. Defining Recursive Procedures on Lists

CSE 341: Programming Languages

SCHEME The Scheme Interpreter. 2 Primitives COMPUTER SCIENCE 61A. October 29th, 2012

Principles of Programming Languages

6.001 Notes: Section 5.1

Lecture 09: Data Abstraction ++ Parsing is the process of translating a sequence of characters (a string) into an abstract syntax tree.

CS61A Notes 02b Fake Plastic Trees. 2. (cons ((1 a) (2 o)) (3 g)) 3. (list ((1 a) (2 o)) (3 g)) 4. (append ((1 a) (2 o)) (3 g))

An Explicit-Continuation Metacircular Evaluator

CS61A Notes Disc 11: Streams Streaming Along

Programming Languages and Techniques (CIS120)

Environment Diagrams. Administrivia. Agenda Step by Step Environment Diagram Stuff. The Rules. Practice it s on! What are The Rules?

Project 2: Scheme Interpreter

Box-and-arrow Diagrams

Functional programming with Common Lisp

6.001: Structure and Interpretation of Computer Programs. Themes to be integrated. Our target the art of M. C. Escher

Lecture08: Scope and Lexical Address

CS 415 Midterm Exam Spring SOLUTION

Software Paradigms (Lesson 4) Functional Programming Paradigm

Midterm 2 Solutions Many acceptable answers; one was the following: (defparameter g1

A Brief Introduction to Scheme (II)

CSSE 304 Assignment #13 (interpreter milestone #1) Updated for Fall, 2018

Comp 411 Principles of Programming Languages Lecture 7 Meta-interpreters. Corky Cartwright January 26, 2018

Type Systems, Type Inference, and Polymorphism

This exam is worth 70 points, or about 23% of your total course grade. The exam contains 15 questions.

Building a system for symbolic differentiation

CS 440: Programming Languages and Translators, Spring 2019 Mon 2/4

Fall Semester, Lecture Notes { September 26, Today's lecture will use the Henderson Picture Language as an example of how we can merge

Intro. Scheme Basics. scm> 5 5. scm>

RLISTS AND THE ENVIRONMENT MODEL 9

Tail Recursion. ;; a recursive program for factorial (define fact (lambda (m) ;; m is non-negative (if (= m 0) 1 (* m (fact (- m 1))))))

Transcription:

6.001 SICP Environment model Models of computation Substitution model A way to figure out what happens during evaluation (define l '(a b c)) (car l) a (define m '(1 2 3)) (car l) a Not really what happens in the computer (car l) a (set-car! l 'z) (car l) z The Environment Model 1

Can you figure out why this code works? (define make-counter (lambda (n) (lambda () (set! n (+ n 1)) n ))) (define ca (make-counter 0)) (ca) ==> 1 (ca) ==> 2 ; not functional programming! (define cb (make-counter 0)) (cb) ==> 1 (ca) ==> 3 ; ca and cb are independent 2

What the EM is: A precise, completely mechanical description of: name-rule define-rule set!-rule lambda-rule application looking up the value of a variable creating a new definition of a var changing the value of a variable creating a procedure applying a procedure Enables analyzing more complex scheme code: Example: make-counter Basis for implementing a scheme interpreter for now: draw EM state with boxes and pointers later on: implement with code 3

A shift in viewpoint As we introduce the environment model, we are going to shift our viewpoint on computation Variable: OLD name for value NEW place into which one can store things Procedure: OLD functional description NEW object with inherited context Expressions Now only have meaning with respect to an environment 4

Frame: a table of bindings Binding: Example: a pairing of a name and a value x is bound to 15 in frame A y is bound to (1 2) in frame A the value of the variable x in frame A is 15 A x: 15 y: 1 2 5

Environment: a sequence of frames Environment consists of frames A and B Environment E2 consists of frame B only A frame may be shared by multiple environments B E2 A z: 10 x: 15 y: this arrow is called the enclosing environment pointer 1 2 6

Evaluation in the environment model All evaluation occurs in an environment The current environment changes when the interpreter applies a procedure The top environment is called the global environment () Only the has no enclosing environment To evaluate a combination Evaluate the subexpressions in the current environment Apply the value of the first to the values of the rest 7

Name-rule A name X evaluated in environment E gives the value of X in the first frame of E where X is bound z ==> 10 z ==> 10 x ==> 15 In, the binding of x in frame A shadows the binding of x in B B z: 10 x: 3 x ==> 3 A x: 15 y: 1 2 8

Define-rule A define special form evaluated in environment E creates or replaces a binding in the first frame of E (define z 20) (define z 25) B z: 10 x: 3 z: 20 z ==> 20 A x: 15 y: z: 25 z ==> 25 1 2 10

Set!-rule A set! of variable X evaluated in environment E changes the binding of X in the first frame of E where X is bound (set! z 20) (set! z 25) B z: 10 x: 3 20 25 A x: 15 y: 1 2 11

Define versus Set! Using defines Using set!s B z: 10 x: 3 z: 20 B z: 102025 x: 3 A x: 15 y: z: 25 A x: 15 y: 1 2 1 2 12

Your turn: evaluate the following in order (+ z 1) ==> (set! z (+ z 1)) (define z (+ z 1)) (set! y (+ z 1)) B z: 10 x: 3 11 (modify EM) (modify EM) (modify EM) 11 Error: unbound variable: y A x: 15 y: z: 12 1 2 13

Double bubble: how to draw a procedure (lambda (x) (* x x)) #[compound-...] A compound proc that squares its argument Environment pointer Code pointer parameters: x body: (* x x) 15

Lambda-rule A lambda special form evaluated in environment E creates a procedure whose environment pointer is E (define square (lambda (x) (* x x))) B A z: 10 x: 3 x: 15 square: Evaluating a lambda actually returns a pointer to the procedure object parameters: x body: (* x x) environment pointer points to frame A because the lambda was evaluated in and A 16

To apply a compound procedure P to arguments: 1. Create a new frame A 2. Make A into an environment E: A's enclosing environment pointer goes to the same frame as the environment pointer of P 3. In A, bind the parameters of P to the argument values 4. Evaluate the body of P with E as the current environment 17

Achieving Inner Peace (and A Good Grade), Part II * 1. Create a new frame A 2. Make A into an environment E: A's enclosing environment pointer goes to the same frame as the environment pointer of P 3. In A, bind the parameters of P to the argument values 4. Evaluate the body of P with E as the current environment *Om Mani Padme Hum 18

(square 4) x: 10 square: *: #[prim] square parameters: x body: (* x x) ==> #[proc] A x: 4 (* x x) ==> 16 * ==> #[prim] x ==> 4 19

Example: inc-square inc-square: square: p: x b: (* x x) p: y b: (+ 1 (square y)) (define square (lambda (x) (* x x))) (define inc-square (lambda (y) (+ 1 (square y))) 20

Example cont'd: (inc-square 4) inc-square: square: y: 4 p: x b: (* x x) p: y b: (+ 1 (square y)) (+ 1 (square y)) + ==> #[prim] (square y) inc-square ==> #[compound-proc...] 21

Example cont'd: (square y) inc-square: square: y: 4 E2 x: 4 p: x b: (* x x) p: y b: (+ 1 (square y)) (+ 1 (square y)) + ==> #[prim] (square y) square ==> #[compound] y ==> 4 (* x x) E2 ==> 16 (+ 1 16) ==> 17 * E2 ==> #[prim] x E2 ==> 4 22

Lessons from the inc-square example EM doesn't show the complete state of the interpreter missing the stack of pending operations The contains all standard bindings (*, cons, etc) omitted from EM drawings Useful to link environment pointer of each frame to the procedure that created it 23

Example: make-counter Counter: something which counts up from a number (define make-counter (lambda (n) (lambda () (set! n (+ n 1)) n ))) (define ca (make-counter 0)) (ca) ==> 1 (ca) ==> 2 ; not functional programming (define cb (make-counter 0)) (cb) ==> 1 (ca) ==> 3 (cb) ==> 2 ; ca and cb are independent 24

(define ca (make-counter 0)) make-counter: ca: p: n b:(lambda () (set! n (+ n 1)) n) n: 0 environment pointer points to because the lambda was evaluated in p: b:(set! n (+ n 1)) n (lambda () (set! n (+ n 1)) n) 25

(ca) ==> 1 make-counter: ca: p: n b:(lambda () (set! n (+ n 1)) n) n: 0 E2 empty p: b:(set! n (+ n 1)) n 1 (set! n (+ n 1)) E2 n E2 ==> 1 26

(ca) ==> 2 make-counter: ca: p: n b:(lambda () (set! n (+ n 1)) n) n: 0 1 2 E3 empty p: b:(set! n (+ n 1)) n (set! n (+ n 1)) E3 n E3 ==> 2 27

(define cb (make-counter 0)) make-counter: ca: cb: p: n b:(lambda () (set! n (+ n 1)) n) n: 2 E3 p: b:(set! n (+ n 1)) n E4 n: 0 p: b:(set! n (+ n 1)) n (lambda () (set! n (+ n 1)) n) E4 28

(cb) ==> 1 make-counter: ca: cb: p: n b:(lambda () (set! n (+ n 1)) n) n: 2 E2 p: b:(set! n (+ n 1)) n E4 n: 0 1 p: E5 b:(set! n (+ n 1)) n 29

Capturing state in local frames & procedures make-counter: ca: cb: p: n b:(lambda () (set! n (+ n 1)) n) n: 2 E2 p: b:(set! n (+ n 1)) n E4 n: 1 p: b:(set! n (+ n 1)) n 30

Lessons from the make-counter example Environment diagrams get complicated very quickly Rules are meant for the computer to follow, not to help humans A lambda inside a procedure body captures the frame that was active when the lambda was evaluated this effect can be used to store local state 31

Environments are important in other languages USA Britain New England Canada Unbound variable!! Macintosh USA Milkshake USA Canadian bacon New England Macintosh Britain Frappe Milkshake New New England England Canadian bacon Canada 32