CS61A Lecture 11Clicker poll Tree recursionIs this tree-recursion?Slide 5calc-evalRepresenting Math in SchemeCapital-T TreePowerPoint PresentationTry IT!Slide 11Tree constructors & selectorschildrenSlide 14Slide 15Treemaptreemapforest-mapSlide 19Slide 20deep-map(deep-map sq ‘((3 . 4) (5 6))deep-map solutionSlide 24treemap and forest-mapforest-map using maptreeaddtreeadd and forest-adddeep-addModify to become deep-addDraw the treeSolution treeadd & forest-addSOLUTION deep-addSOLUTION Draw the treeCS61A Lecture 112011-07-07Colleen LewisClicker poll What do you think of the pace of lecture?A)Too slowB)A little slowC)About rightD)A little fastE)Too fastTree recursion•A procedure in which each invocation makes more than one recursive callIs this tree-recursion?(define (fib n) (if (< n 2) 1 (+ (fib (- n 1))(fib (- n 2)))))A) Yes B) No C)??Is this tree-recursion?(define (filter pred seq) (cond((null? Seq) ‘())((pred (car seq)) (cons (car seq) (filter pred (cdr seq))))(else (filter pred (cdr seq)))))A) Yes B) No C)??calc-eval(define (calc-eval exp) (cond ((number? exp) exp) ((list? exp) (calc-apply (car exp) (map calc-eval (cdr exp)))) (else (error “Calc: bad exp”))))Is this tree-recursion?A) Yes B) No C)??Representing Math in Scheme(+ (* 2 4) 5)car: + cdr: ((* 2 4) 5)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 TreeRepresenting Trees in Scheme(World (N-America) (Antarctica))car: World cdr: ((N-America) (Antarctica))Extra set of parensTry IT! (World (N-America(US)(Canada)(Mexico)) (Antarctica))car: World cdr: ((N-America(US)(Canada)(Mexico)) (Antarctica))How many open parens?A) 3 B) 4 C) 5 D) 6 E) 7Representing Trees in Scheme(World (N-America) (Antarctica))datum: World children:((N-America) (Antarctica))List of trees (forest)root nodeleaf (no children)Tree constructors & selectors(define (make-tree data children)(cons data children))(define (datum Tree)(car Tree))(define (children Tree)(cdr Tree))children•What type of thing is (children tree)? A)List of ListsB)List of TreesC)List of treesD)ListE)??CONSTRUCTING Trees in Schemedatum: World children:((N-America) (Antarctica))(make-tree ‘World(list (make-tree ‘N-America ‘())(make-tree ‘Antarctica ‘())))Try IT! (make-tree ‘World (list(make-tree‘N-America(list (make-tree ‘US ‘()) (make-tree ‘Canada ‘()) (make-tree ‘Mexico ‘())))(make-tree ‘Antarctica ‘())))How many calls to make-tree?A) 3 B) 4 C) 5 D) 6 E) 7TreemapSTk>(define t1 (make-tree 3 ‘())t1STk>(datum t1)3STk>(children t1)()STk>(define t2 (treemap square t1))t2STk>(datum t2)9treemapIf TREE is the tree to the right, what call to treemap will create the below?A.(treemap (λ(x) (length(datum x)) TREE)B.(treemap length TREE)C.(treemap count TREE)D.(treemap (λ(x) (count (datum x)) TREE)forest-map(define (forest-map fn forest) •What type of thing is a forest? A)List of ListsB)List of TreesC)List of treesD)ListE)??Write it without calling map! It should call treemap on each treeforest-map(define (forest-map fn forest) (if (null? forest)‘()(cons(treemap fn (car forest))(forest-map fn (cdr forest)))))Is using cons, car & cdr a data abstraction violation (DAV)? A) Yes B) No C) It dependsforest-map(define (forest-map fn forest) •What type of thing is a forest? A)List of ListsB)List of TreesC)List of treesD)ListE)??deep-mapREVIEW(deep-map sq ‘((3 . 4) (5 6))car cdrcar cdr3car cdr4car cdr6car cdr5car 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))))treemap(define (treemap fn tree) (make-tree (fn (datum tree))(forest-map fn (children tree))))treemap and forest-map(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)))))Mutual recursionWhy don’t we need a base case in treemap?forest-map using map(define (forest-map fn forest) (map (lambda (one-tree)(tree-map fn one-tree))forest))treeaddSTk>(define kid1 (make-tree 3 ‘())STk>(define kid2 (make-tree 4 ‘())STk>(define parent (make-tree ‘5 (list kid1 kid2))STk>(treeadd parent)12treeadd and forest-add(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)))))Modify forest-addto return the sum of all trees in the forestModify treeaddto return the sum of the treesdeep-addSTk> (deep-add 3)3STk>(deep-add ‘())0STk>(deep-add ‘( 1 2 3))6STk>(deep-add ‘((1 2) (3 . 2) 1))9Modify 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))))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)))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)))))SOLUTION deep-add(define (deep-add arg) (cond ((null? arg) 0) ((pair? arg) (+ (deep-add (car arg)) (deep-add (cdr arg)))) (else arg)))SOLUTION 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
View Full Document