Higher-Order List Operations

left top right

(define (map fn list-of-values)
  ;; MAP: (X->Y, X*) -> Y*
  (if (null? list-of-values)
      '()
      (cons (fn (car list-of-values))
            (map fn (cdr list-of-values)))))

(define (accumulate initial-value
                    operation list-of-elements)
  ;; ACCUMULATE: (X, (Y, X)->X, Y*) -> X
  (if (null? list-of-elements)
      initial-value
      (operation 
        (car list-of-elements)
        (accumulate initial-value operation
                    (cdr list-of-elements)))))

Jim Miller W3C