This pattern is like the one for lists, except that it calls itself twice for interior nodes. This is essentially the same as the divide-and-conquer design pattern.
 (defun myfun (tree) 
          (if (interior? tree) 
                  (combine (myfun (first tree))  ; left 
                          (myfun (rest tree)))  ; right 
                  (baseanswer   tree) ))       ; leaf node 
(defun addnums (tree)  ; sum all numbers in tree
  (if (consp tree)
      (+ (addnums (first tree))
         (addnums (rest tree)) )
      (if (numberp tree)
          tree
          0) ) )
public static Integer addnums (Object tree) {
    if ( consp(tree) )
        return ( addnums(first((Cons)tree)) +
                 addnums(rest((Cons)tree)) );
    else if ( tree instanceof Integer )
        return (Integer) tree;
    else return Integer.valueOf(0); }
Contents    Page-10    Prev    Next    Page+10    Index