;; Recursion to build a list using elements of an input ;; sequence. Not tail recursive! (defn inc-members [s] (if (empty? s) '() (conj (inc-members (rest s)) (inc (first s))))) ;; Recursion to build a vector using elements of an input ;; sequence. Not tail recursive! (defn inc-members2 [s] (if (empty? s) [] (conj (inc-members2 (rest s)) (inc (first s))))) ;; Helper function to build a result sequence by processing ;; elements of an input sequence tail-recursively. (defn work [s acc] (if (empty? s) acc (recur (rest s) (conj acc (inc (first s)))))) ;; Call the helper function, using a list as the accumulator. (defn inc-members3 [s] (work s '())) ;; Call the helper function, using a vector as the accumulator. (defn inc-members4 [s] (work s [])) ;; This is equivalent to inc-members4, but uses loop/recur ;; instead of an explicit helper function. (defn inc-members5 [s] (loop [ss s acc []] (if (empty? ss) acc (recur (rest ss) (conj acc (inc (first ss))))))) ;; Try the following: ;; (inc-members [1 2 3]) ;; (inc-members2 [1 2 3]) ;; (inc-members3 [1 2 3]) ;; (inc-members4 [1 2 3]) ;; (inc-members5 [1 2 3])