SlideServe
Menu
Préférences
© SlideServe · v2026

CS61A Lecture 11

neal avatar
34 diapositives · 609 Views · Aug 14, 2014

CS61A Lecture 11. 2011-07-07 Colleen Lewis. Clicker poll . What do you think of the pace of lecture? Too slow A little slow About right A little fast Too fast. Tree recursion. A procedure in which each invocation makes more than one recursive call. Is this tree-recursion?.

CS61A Lecture 11 - slide 1
01 / 34CS61A Lecture 11
1 / 17

Télécharger la présentation

CS61A Lecture 11
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. CS61A Lecture 11 2011-07-07 Colleen Lewis

  2. Clicker poll  What do you think of the pace of lecture? Too slow A little slow About right A little fast Too fast

  3. Tree recursion A procedure in which each invocation makes more than one recursive call

  4. Is this tree-recursion? A) Yes B) No C)?? (define (fib n) (if (< n 2) 1 (+ (fib (- n 1))(fib (- n 2)))))

  5. Is this tree-recursion? A) Yes B) No C)?? (define (filter pred seq) (cond ((null? Seq) ‘()) ((pred (car seq)) (cons (car seq) (filter pred (cdr seq)))) (else (filter pred (cdr seq)))))

  6. calc-eval 5 4 + * 2 Is this tree-recursion? A) Yes B) No C)?? (define (calc-eval exp) (cond ((number? exp) exp) ((list? exp) (calc-apply (car exp) (map calc-eval (cdr exp)))) (else (error “Calc: bad exp”))))

  7. Representing Math in Scheme 5 4 + * 2 (+ (* 2 4) 5) car: + cdr: ((* 2 4) 5)

  8. Capital-T Tree • Abstract Data Type • Not defined in the book • The book calls any deep-list a “tree”. • Lower-case-t tree (book) is different than Capital-T Tree

  9. Representing Trees in Scheme Antarctica Extra set of parens World N-America (World (N-America) (Antarctica)) car: World cdr: ((N-America) (Antarctica))

  10. Try IT! How many open parens? A) 3 B) 4 C) 5 D) 6 E) 7 Antarctica World Mexico N-America Canada US (World (N-America(US)(Canada)(Mexico)) (Antarctica)) car: World cdr: ((N-America(US)(Canada)(Mexico)) (Antarctica))

  11. Representing Trees in Scheme root node Antarctica leaf (no children) World N-America List of trees (forest) (World (N-America) (Antarctica)) datum: World children:((N-America) (Antarctica))

  12. Tree constructors & selectors (define (make-tree data children) (cons data children)) (define (datum Tree) (car Tree)) (define (children Tree) (cdr Tree))

  13. children • What type of thing is (children tree)? • List of Lists • List of Trees • List of trees • List • ??

  14. CONSTRUCTING Trees in Scheme Antarctica World N-America datum: World children:((N-America) (Antarctica)) (make-tree ‘World (list (make-tree ‘N-America ‘()) (make-tree ‘Antarctica ‘())))

  15. Try IT! How many calls to make-tree? A) 3 B) 4 C) 5 D) 6 E) 7 Antarctica World Mexico N-America Canada US (make-tree ‘World (list (make-tree ‘N-America (list (make-tree ‘US ‘()) (make-tree ‘Canada ‘()) (make-tree ‘Mexico ‘()))) (make-tree ‘Antarctica ‘())))

  16. Treemap STk>(define t1 (make-tree 3 ‘()) t1 STk>(datum t1) 3 STk>(children t1) () STk>(define t2 (treemap square t1)) t2 STk>(datum t2) 9

  17. treemap If TREE is the tree to the right, what call to treemap will create the below? Antarctica 10 World 5 Mexico 6 A.(treemap (λ(x) (length(datum x)) TREE) B.(treemap length TREE) (treemap count TREE) (treemap (λ(x) (count (datum x)) TREE) N-America 9 Canada 6 US 2

  18. forest-map (define (forest-map fn forest) • What type of thing is a forest? • List of Lists • List of Trees • List of trees • List • ?? Write it without calling map! It should call treemap on each tree

  19. forest-map Is using cons, car & cdr a data abstraction violation (DAV)? A) Yes B) No C) It depends (define (forest-map fn forest) (if (null? forest) ‘() (cons (treemap fn (car forest)) (forest-map fn (cdr forest)))))

  20. forest-map (define (forest-map fn forest) • What type of thing is a forest? • List of Lists • List of Trees • List of trees • List • ??

  21. deep-map REVIEW

  22. (deep-map sq ‘((3 . 4) (5 6)) car car car car car car cdr cdr cdr cdr cdr cdr 4 5 3 6 (cons (deep-map fn (car arg)) (deep-map fn (cdr arg))) ? ?

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

  24. treemap (define (treemap fn tree) (make-tree (fn (datum tree)) (forest-map fn (children tree))))

  25. treemapand forest-map Mutual recursion Why don’t we need a base case in treemap? (define (treemap fn tree) (make-tree (fn (datum tree)) (forest-map fn (children tree)))) (define (forest-map fn forest) (if (null? forest) ‘() (cons (treemap fn (car forest)) (forest-map fn (cdr forest)))))

  26. forest-map using map (define (forest-map fn forest) (map (lambda (one-tree) (tree-map fn one-tree)) forest))

  27. treeadd STk>(define kid1 (make-tree 3 ‘()) STk>(define kid2 (make-tree 4 ‘()) STk>(define parent (make-tree ‘5 (list kid1 kid2)) STk>(treeadd parent) 12

  28. treeaddand forest-add Modify treeadd to return the sum of the trees Modify forest-add to return the sum of all trees in the forest (define (treeadd tree) (make-tree (datum tree) (forest-add (children tree)))) (define (forest-add forest) (if (null? forest) ‘() (cons (treeadd (car forest)) (forest-add (cdr forest)))))

  29. deep-add STk> (deep-add 3) 3 STk>(deep-add ‘()) 0 STk>(deep-add ‘( 1 2 3)) 6 STk>(deep-add ‘((1 2) (3 . 2) 1)) 9

  30. Modify to become deep-add (define (deep-add fn arg) (cond ((null? arg) '()) ((pair? arg) (cons (deep-add fn (car arg)) (deep-add fn (cdr arg)))) (else (fn arg))))

  31. Draw the tree (define a (make-tree 2 '())) (define b (make-tree 3 '())) (define c (make-tree 5 (list a b))) (define d (make-tree 1 (list c)))

  32. Solution treeadd & forest-add (define (treeadd tree) (+ (datum tree) (forest-add (children tree)))) (define (forest-add forest) (if (null? forest) 0 (+ (treeadd (car forest)) (forest-add (cdr forest)))))

  33. SOLUTION deep-add (define (deep-add arg) (cond ((null? arg) 0) ((pair? arg) (+ (deep-add (car arg)) (deep-add (cdrarg)))) (else arg)))

  34. SOLUTION Draw the tree 3 1 5 2 (define a (make-tree 2 '())) (define b (make-tree 3 '())) (define c (make-tree 5 (list a b))) (define d (make-tree 1 (list c)))