AgreeableLandscape@lemmy.mlM to Programmer Humor@lemmy.ml · 3 years agoThe O(1) Fibonacci implementationlemmy.mlimagemessage-square7fedilinkarrow-up149arrow-down13
arrow-up146arrow-down1imageThe O(1) Fibonacci implementationlemmy.mlAgreeableLandscape@lemmy.mlM to Programmer Humor@lemmy.ml · 3 years agomessage-square7fedilink
minus-square☆ Yσɠƚԋσʂ ☆@lemmy.mllinkfedilinkarrow-up0·3 years agobest of both world with Lisp macros :) (defmacro gen-fib [size] (let [values (->> (iterate (fn [[a b]] [b (+ a b)]) [0 1]) (map first) (take size) (vec))] `(defn ~'fib [~'n] (~values ~'n)))) (macroexpand-1 '(gen-fib 10)) ;=> (clojure.core/defn fib [n] ([0 1 1 2 3 5 8 13 21 34] n)) (gen-fib 10) (fib 9) ;=> 34
best of both world with Lisp macros :)
(defmacro gen-fib [size] (let [values (->> (iterate (fn [[a b]] [b (+ a b)]) [0 1]) (map first) (take size) (vec))] `(defn ~'fib [~'n] (~values ~'n)))) (macroexpand-1 '(gen-fib 10)) ;=> (clojure.core/defn fib [n] ([0 1 1 2 3 5 8 13 21 34] n)) (gen-fib 10) (fib 9) ;=> 34