CATCH and OOPS

left top right

(define (add-up l)
  (if (null? l)
      0
      (+ (car l) (add-up (cdr l)))))

(define (average values)
 (catch Divide-by-Zero 
   (divide (add-up values) (length values))
   0))

(define (divide x y)
  (if (zero? y)
      (oops divide-by-zero)
      (/ x y)))

(average (list 10 20)) ==> 15
(average '()) ==> 0

Jim Miller W3C