; ; examples from class 9/7/99 ; ; ; flattening a list ; (define (flatten l) (if (null? l) '() (append (if (list? (car l)) (flatten (car l)) (list (car l))) (flatten (cdr l))))) ; ; expression tree evaluation ; (define tree1 '(add (times 3 8) (divide 10 (minus 8 3)))) (define (eval-tree t) (if (number? t) t (case (car t) ((add) (+ (eval-tree (cadr t)) (eval-tree (caddr t)))) ((times) (* (eval-tree (cadr t)) (eval-tree (caddr t)))) ((minus) (- (eval-tree (cadr t)) (eval-tree (caddr t)))) ((divide) (/ (eval-tree (cadr t)) (eval-tree (caddr t))))))) ; ; exercise 6.34 from grillmeyer ; ; takes a list and returns the last positive number in the list or #f if ; none exist ; (define (pos-finder l) (pos-finder-helper l #f)) (define (pos-finder-helper l result) (if (null? l) result (pos-finder-helper (cdr l) (if (and (number? (car l)) (positive? (car l))) (car l) result)))) ; ; the other version we saw in class (find the first positive number ; starting from the back) ; (define (pos-finder2 l) (pos-finder2-helper (reverse l))) ((define (pos-finder2-helper l) (if (null? l) #f (if (and (number? (car l)) (positive? (car l))) (car l) (pos-finder2-helper (cdr l)))))