DOC PREVIEW
Berkeley COMPSCI 61A - Lecture 10

This preview shows page 1-2 out of 6 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience
View full document
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 6 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

7/6/2011 1 CS61A Lecture 10 2011-07-06 Colleen Lewis TODAY • Make a calculator program – To better understand how the Scheme interpreter works – STEP 1: calc-apply – STEP 2: list versus quote (Scheme primitives) – STEP 3: read (Scheme primitive) – STEP 4: read-print loop – STEP 5: read-eval-print loop – STEP 6: calc-eval • deep-map STEP 1: calc-apply STk> (calc-apply '+ '(1 2 3)) 6 STk> (calc-apply '* '(2 4 3)) 24 STk> (calc-apply '/ '(10 2)) 5 STk> (calc-apply '- '(9 2 3 1)) 3 (define (calc-apply fn-wd arg-list) (cond ((equal? fn-wd '+) (add-up-stuff-in arg-list)) ((equal? fn-wd '-) (subtract-stuff-in arg-list)) ((equal? fn-wd '*) (multiply-stuff-in arg-list)) ((equal? fn-wd '/) (divide-stuff-in arg-list)) (else (error "Calc: bad op: " fn-wd)))) add-up-stuff-in (define (add-up-stuff-in lst) (accumulate + 0 lst)) STk> (accumulate + 0 '(1 2 4)) .. -> + with args = (4 0) .. <- + returns 4 .. -> + with args = (2 4) .. <- + returns 6 .. -> + with args = (1 6) .. <- + returns 7 7 STEP 2: list versus quote STk> '(1 2 +) (1 2 +) STk> (list 1 2 +) (1 2 #[closure arglist=args 7ff53de8])7/6/2011 2 STEP 3: Demo (read) STk> (read) 45 45 STk> (read) hello hello STk> (read) 'hello (quote hello) I typed this! After I hit return, Scheme printed this I didn’t have to quote words ' is really syntactic sugar for quote (a special form) Demo (read) STk> (define a (read)) hello a STk> a hello STk> Demo (read) STk> (define b (read)) (+ 1 2) b STk> b (+ 1 2) STk> (car b) + STk> (list-ref b 1) 1 Not: #[closure arglist=args 7ff53de8] Demo (read) STk> (define c (read)) (+ 3 (+ 1 2)) c STk> (list-ref c 2) (+ 1 2) STk> (car c) + Woah! read figured out it was a list within a list. Demo (read) STk> (define d (read)) (+ 3 ) d STk> d (+ 3) read waits for me to put necessary close-parens read Summary • Prompts user for input • NOT a function • Whatever the user types it returns – They can type words (without quotes) – They can type numbers – They can type lists • If it looks like a list it waits for you to put necessary close parentheses7/6/2011 3 STEP 4: (read-print) (define (read-print) (display "type here: ") (flush) (print (read)) (read-print)) display prints stuff Make the line above visible Waits for user input print prints stuff on a new line recursive call (infinite loop) STk> (read-print) type here: 4 4 type here: hi hi type here: (+ 1 2) (+ 1 2) type here: (+ (+ 3 4) 2) (+ (+ 3 4) 2) type here: Infinite loop! I’m typing HERE not at STk> (calc) demo STk> (calc) calc: 1 1 calc: (+ 2 3) 5 calc: (+ 2 (* 3 4)) 14 (read-print) Was sort of silly (calc) actually does something STEP 5: Read-Eval-Print Loop (calc) demo – it doesn’t have variables or “real” functions calc: + *** Error: Calc: bad expression: + Current eval stack: STk> (calc) calc: x *** Error: Calc: bad expression: x Current eval stack: (calc) read-eval-print loop (define (calc) (display "calc: ") (flush) (print (calc-eval (read))) (calc)) Representing Math + 2 1 Translating to Scheme (+ 1 2) car: + cdr: (1 2) 2 1 Children7/6/2011 4 Representing Math in Scheme (+ (* 2 4) 5) car: + cdr: ((* 2 4) 5) + 5 * 4 2 Representing Math in Scheme (+ (* 3 (+ 2 1) 4) 5) car: + cdr:((* 3 (+ 2 1) 4) 5) + 5 * 4 + 1 2 3 How many open parens? A) 1 B) 2 C) 3 D) 4 E) 5 Remember the(calc) read-eval-print loop? (define (calc) (display "calc: ") (flush) (print (calc-eval (read))) (calc)) calc-eval base case STk> (calc) calc: 1 1 (define (calc-eval exp) (cond ((number? exp) exp) ((list? exp) _____________ (else (error “Calc: bad exp”)))) calc-eval STk> (calc) calc: (+ 1 2) 3 (define (calc-eval exp) (cond ((number? exp) exp) ((list? exp) (calc-apply (car exp) (map calc-eval (cdr exp)))) (else (error “Calc: bad exp”)))) „+ „(1 2) + 2 1 calc-eval STk> (calc) calc: (+ (* 2 4) 5) 40 (define (calc-eval exp) (cond ((number? exp) exp) ((list? exp) (calc-apply (car exp) (map calc-eval (cdr exp)))) (else (error “Calc: bad exp”)))) „+ „(8 5) + 5 * 4 27/6/2011 5 calc-eval STk> (calc) calc: (+ (* 2 4) 5) 40 (define (calc-eval exp) (cond ((number? exp) exp) ((list? exp) (calc-apply (car exp) (map calc-eval (cdr exp)))) (else (error “Calc: bad exp”)))) + 5 * 4 2 (calc-eval exp) Works for bigger trees! + + 4 5 * 2 2 * 4 2 + 1 + * 3 3 3 (calc-apply (car exp) (map calc-eval (cdr exp)))) deep-map Remember map? Meet deep-map STk> (map square „(1 2 3)) (1 4 9) STk> (deep-map square „(1 2 3)) (1 4 9) STk> (deep-map square „((3 . 4) (5 6))) ((9 . 16) (25 36)) STk> (deep-map square 3) 9 STk> (deep-map square „()) () deep-map base cases STk> (deep-map square 3) 9 STk> (deep-map square „()) () (define (deep-map fn arg) (cond ((null? arg) '()) ((pair? arg) _____________ (else (fn arg)))) Draw ‘((3 . 4) (5 6)) How many pairs? A) 1 B) 2 C) 3 D) 4 E) 57/6/2011 6 (deep-map sq ‘((3 . 4) (5 6)) car cdr car cdr 3 car cdr 4 car cdr 6 car cdr 5 car cdr ? ? (cons (deep-map fn (car arg)) (deep-map fn (cdr arg))) deep-map solution (define (deep-map fn arg) (cond ((null? arg) '()) ((pair? arg) (cons (deep-map fn (car arg)) (deep-map fn (cdr arg)))) (else (fn arg)))) map (define (map fn seq) (if (null? seq) „() (cons (fn (car seq)) (map fn (cdr seq))))) Representing Math in Scheme SOLUTION (+ (* 3 (+ 2 1) 4) 5) car: + cdr:((* 3 (+ 2 1) 4) 5) + 5 * 4 + 1 2 3 How many open parens? A) 1 B) 2 C) 3 D) 4 E) 5 Draw ‘((3 . 4) (5 6)) car cdr car cdr 3 car cdr 4 car cdr 6 car cdr 5


View Full Document

Berkeley COMPSCI 61A - Lecture 10

Documents in this Course
Lecture 1

Lecture 1

68 pages

Midterm

Midterm

5 pages

Midterm

Midterm

6 pages

Lecture 35

Lecture 35

250 pages

Lecture 14

Lecture 14

125 pages

Lecture 2

Lecture 2

159 pages

Lecture 6

Lecture 6

113 pages

Lecture 3

Lecture 3

162 pages

Homework

Homework

25 pages

Lecture 13

Lecture 13

117 pages

Lecture 29

Lecture 29

104 pages

Lecture 11

Lecture 11

173 pages

Lecture 7

Lecture 7

104 pages

Midterm

Midterm

6 pages

Midterm

Midterm

6 pages

Lecture 8

Lecture 8

108 pages

Lab 4

Lab 4

4 pages

Lecture 7

Lecture 7

52 pages

Lecture 20

Lecture 20

129 pages

Lecture 15

Lecture 15

132 pages

Lecture 9

Lecture 9

95 pages

Lecture 30

Lecture 30

108 pages

Lecture 17

Lecture 17

106 pages

Load more
Download Lecture 10
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Lecture 10 and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Lecture 10 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?