Clojure higher-order functions.
(defn traverse
"A very general function for traversing sequences"
([s f comb]
(if (empty? (rest s))
(f (first s))
(comb (traverse (rest s) f comb) (f (first s)))))
([s f comb seed]
(if (empty? s) seed
(comb (traverse (rest s) f comb seed) (f (first s))))))
(defn mymap [f s] (traverse s f conj '()))
(mymap inc '(1 2 3))
(mymap inc [1 2 3])
(defn myreduce [comb seed s] (traverse s identity comb seed))
(myreduce + 0 '(1 2 3))
;; define filter and flatten using traverse
CSci 4651
course web site.