Missing slides from lecture 8
Download
1 / 32

missing slides from lecture 8 - PowerPoint PPT Presentation


  • 300 Views
  • Uploaded on

missing slides from lecture #8. How does the interpreter prints lists and pairs ??. First version, using dot notation. ( define (print-list-structure x) (define (print-contents x) (print-list-structure (car x)) (display " . ") (print-list-structure (cdr x)))

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'missing slides from lecture 8' - Thomas


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
Missing slides from lecture 8 l.jpg

missing slides fromlecture #8

מבוא מורחב



First version using dot notation l.jpg
First version, using dot notation

(define (print-list-structure x)

(define (print-contents x)

(print-list-structure (car x))

(display " . ")

(print-list-structure (cdr x)))

(cond ((null? x) (display "()"))

((atom? x) (display x))

(else (display "(")

(print-contents x)

(display ")"))))

(p-l-s (list 1 2 3)) ==> (1 . (2 . (3 . ())))

מבוא מורחב


Second version try to identify lists l.jpg
Second version, try to identify lists

(define (print-list-structure x)

(define (print-contents x)

(print-list-structure (car x))

(cond ((null? (cdr x)) nil)

((atom? (cdr x))

(display " . ")

(print-list-structure (cdr x)))

(else

(display " ")

(print-contents (cdr x)))))

(cond ((null? x) (display "()"))

((atom? x) (display x))

(else (display "(")

(print-contents x)

(display ")"))))

(p-l-s (list 1 2 3)) ==> (1 2 3)


More examples l.jpg
More examples

How to create the following output ?

( 1 2 . 3)

(cons 1 (cons 2 3))

(1. 2 3)

cannot

מבוא מורחב


Lecture 10 l.jpg

Lecture #10

מבוא מורחב



3 a better implementation l.jpg
3. A better implementation

1. Use cond instead of nested if expressions

2. Use data abstraction

  • To use cond:

    • write a predicate that collects all tests to get to a branch:(define sum-expr? (lambda (e) (and (pair? e) (eq? (car e) '+)))); type: Expr -> boolean

    • do this for every branch:(define variable? (lambda (e) (and (not (pair? e)) (symbol? e))))

מבוא מורחב


Use data abstractions l.jpg
Use data abstractions

  • To eliminate dependence on the representation:

    (define make-sum (lambda (e1 e2) (list '+ e1 e2))(define addend (lambda (sum) (cadr sum)))

מבוא מורחב


A better implementation l.jpg
A better implementation

(define deriv (lambda (expr var)

(cond

((number? expr) 0)

((variable? expr) (if (eq? expr var) 1 0))

((sum-expr? expr)

(make-sum (deriv (addend expr) var)

(deriv (augend expr) var)))

((product-expr? expr)

<handle product expression>)

(else

(error "unknown expression type" expr))

))

מבוא מורחב


Deriv reduction problem l.jpg
Deriv: Reduction problem

(deriv '(+ x 3) 'x) ==>

(+ 1 0)

(deriv '(* x y) 'x) ==>

(+ (* x 0) (* 1 y))

(deriv '(* (* x y) (+ x 3)) 'x) ==>

(+ (* (* x y) (+ 1 0)) (* (+ (* x 0) (* 1 y)) (+ x 3)))

מבוא מורחב


Changes are isolated l.jpg
Changes are isolated

(deriv '(+ x y) 'x) ==> (+ 1 0) (a list!)

(define (make-sum a1 a2)

(cond ((=number? a1 0) a2)

((=number? a2 0) a1)

((and (number? a1) (number? a2))

(+ a1 a2))

(else (list '+ a1 a2))))

(define (=number? exp num)

(and (number? exp) (= exp num)))

(deriv '(+ x y) 'x) ==> 1

(deriv '(* x y) 'x) ==> y

מבוא מורחב


Variable number of arguments in sums and products l.jpg
Variable number of arguments in sums and products

(deriv’(+ (* x 3) 10 (+ 2 x)) ’x)

(define (augend s)

(if (null? (cdddr s))

(caddr s)

(cons '+ (cddr s))))

(augend ’(+ (* x 3) 10 (+ 2 x))) ==> (+ 10 (+ 2 x))

4

(deriv’(+ (* x 3) 10 (+ 2 x)) ’x) ==>

מבוא מורחב


Variable number of summands and multipliers l.jpg
Variable number of summands and multipliers

(deriv '(+ (* x a) (* x b) (* x c)) 'x) =>

(+ a (+ b c))

(define (make-sum a1 a2)

(cond ((=number? a1 0) a2)

((=number? a2 0) a1)

((and (number? a1) (number? a2)) (+ a1 a2))

((sum? a2) (cons '+ (cons a1 (cdr a2))))

(else (list '+ a1 a2))))

(deriv '(+ (* x a) (* x b) (* x c)) 'x) =>

(+ a b c)

מבוא מורחב


Representing sets l.jpg

Representing sets

מבוא מורחב


Definitions l.jpg
Definitions

A set is a collection of distinct items

(element-of-set? x set)

(adjoin-set x set)

(union-set s1 s2)

(intersection-set s1 s2)

מבוא מורחב


Version 1 represent a set as an unordered list l.jpg
Version 1: Represent a set as an unordered list

(define (element-of-set? x set)

(cond ((null? set) false)

((equal? x (car set)) true)

(else (element-of-set? x (cdr set)))))

equal? : Like eq? for symbols. Works for numbers

Works recursively for compounds: Apply equal? to

the components.

(eq? (list ‘a ‘b) (list ‘a ‘b))

(equal? (list ‘a ‘b) (list ‘a ‘b))

מבוא מורחב


Version 1 represent a set as a list l.jpg
Version 1: Represent a set as a list

(define (adjoin-set x set)

(if (element-of-set? x set)

set

(cons x set)))

מבוא מורחב


Version 1 represent a set as a list19 l.jpg
Version 1: Represent a set as a list

(define (intersection-set set1 set2)

(cond ((or (null? set1) (null? set2)) '())

((element-of-set? (car set1) set2)

(cons (car set1)

(intersection-set (cdr set1) set2)))

(else (intersection-set (cdr set1) set2))))

מבוא מורחב


Version 1 represent a set as a list20 l.jpg
Version 1: Represent a set as a list

(define (union-set set1 set2)

(cond ((null? set1) set2))

((not (element-of-set? (car set1) set2))

(cons (car set1)

(union-set (cdr set1) set2)))

(else (union-set (cdr set1) set2))))

(define (union-set set1 set2)

(cond ((null? set1) set2))

(else (adjoin-set (car set1)

(union-set (cdr set1) set2)))))

מבוא מורחב


Complexity l.jpg
Complexity

Element-of-set

Adjoin-set

Intersection-set

Union-set

(n)

(n)

(n2)

(n2)

מבוא מורחב


Version 2 representing a set as an ordered list l.jpg
Version 2: Representing a set as an ordered list

(define (element-of-set? x set)

(cond ((null? set) false)

((= x (car set)) true)

((< x (car set)) false)

(else (element-of-set? x (cdr set)))))

n/2 steps on average  (n)

Adjoin-set is similar, please try by yourself

מבוא מורחב


Ordered lists cont l.jpg
Ordered lists (cont.)

(define (intersection-set set1 set2)

(cond ((or (null? set1) (null? set2)) '())

((element-of-set? (car set1) set2)

(cons (car set1)

(intersection-set (cdr set1) set2)))

(else (intersection-set (cdr set1) set2))))

Can we do it better ?

מבוא מורחב


Ordered lists cont24 l.jpg
Ordered lists (cont.)

(define (intersection-set set1 set2)

(if (or (null? set1) (null? set2))

'()

(let ((x1 (car set1)) (x2 (car set2)))

(cond ((= x1 x2)

(cons x1

(intersection-set (cdr set1)

(cdr set2))))

((< x1 x2)

(intersection-set (cdr set1) set2))

((< x2 x1)

(intersection-set set1 (cdr set2)))))))

מבוא מורחב


Ordered lists cont25 l.jpg
Ordered lists (Cont.)

set1 set2 intersection

(1 3 7 9) (1 4 6 7) (1

(3 7 9) (4 6 7) (1

(7 9) (4 6 7) (1

(7 9) (6 7) (1

(7 9) (7) (1

(9) () (1 7)

Time and space  (n)

Union -- similar

מבוא מורחב


Complexity26 l.jpg

unordered

Element-of-set

Adjoin-set

Intersection-set

Union-set

(n)

(n)

(n2)

(n2)

Complexity

ordered

(n)

(n)

(n)

(n)

מבוא מורחב


Representing sets as binary trees l.jpg

3

7

7

1

9

3

5

9

12

5

1

12

Representing sets as binary trees

מבוא מורחב


Representing sets as binary trees cont l.jpg

7

9

3

12

5

1

Representing sets as binary trees (Cont.)

(define (entry tree) (car tree))

(define (left-branch tree) (cadr tree))

(define (right-branch tree) (caddr tree))

(define (make-tree entry left right)

(list entry left right))

מבוא מורחב


Representing sets as binary trees cont29 l.jpg
Representing sets as binary trees (Cont.)

(define (element-of-set? x set)

(cond ((null? set) false)

((= x (entry set)) true)

((< x (entry set))

(element-of-set? x (left-branch set)))

((> x (entry set))

(element-of-set? x (right-branch set)))))

Complexity: (d)

If tree is balanced d  log(n)

מבוא מורחב


Representing sets as binary trees cont30 l.jpg

1

7

3

9

3

5

12

5

1

7

9

12

Representing sets as binary trees (Cont.)

מבוא מורחב


Representing sets as binary trees cont31 l.jpg
Representing sets as binary trees (Cont.)

(define (adjoin-set x set)

(cond ((null? set) (make-tree x '() '()))

((= x (entry set)) set)

((< x (entry set))

(make-tree (entry set)

(adjoin-set x (left-branch set))

(right-branch set)))

((> x (entry set))

(make-tree (entry set)

(left-branch set)

(adjoin-set x (right-branch set))))))

מבוא מורחב


Complexity32 l.jpg

unordered

ordered

Element-of-set

Adjoin-set

Intersection-set

Union-set

(n)

(n)

(n)

(n)

(n)

(n2)

(n)

(n2)

Complexity

trees

(log(n))

(log(n))

(nlog(n))

(nlog(n))

מבוא מורחב


ad