Example: using helper functions

;; compute the average mpg for all cars in the loa list
;; List-of-Auto -> Number
;; (define (avg-mpg loa)

;; Notice: we will really need two functions:

;; compute the total of the mpg consumption for all cars int the loa list
;; List-of-Auto -> Number
;; (define (total-mpg loa)...

;; count the number of autos in the loa list
;; List-of-Auto -> Number
;; (define (count loa) ...

;; Need to make a decision, how to handle the empty case
;; Decide to produce average to be 0

;; Examples:
;; (= (avg-mpg mt-loa) 0)
;; (= (avg-mpg loa1) 20)
;; (= (avg-mpg loa2) 15)
;; (= (avg-mpg loa3) 15)

;; Template:
;; (cond 
;;   [( empty? loa) ...]
;;   [else  ... (first loa) ...
;;          ... (rest loa) ...]

;; Notice, we cannot apply avg-mpg to the (rest loa)
;; we use the wish list helper functions instead

;; Program:
(define (avg-mpg loa)
  (cond
    [(empty? loa) 0]
    [else (/ (total-mpg loa) (count loa))]))

;; Tests for the avg-mpg function:
(= (avg-mpg mt-loa) 0)
(= (avg-mpg loa1) 20)
(= (avg-mpg loa2) 15)
(= (avg-mpg loa3) 15)