再帰を使わない

第13回Formal Methods勉強会にて、
再帰を使わずにfoldrで書く」という話があったので、
Clojureの場合reduceでやってみる。

(defn factorial [n] (reduce * 1 (take n (iterate inc 1))))

(defn fib [n] ((reduce (fn [[a b] _] [b (+ a b)]) [0 1] (range n)) 1))

foldr,foldlの実装はこちらで発見。
https://github.com/zaphar/clojure-playground/blob/master/src/com/marzhillstudios/list/util.clj