Which power function is right for Clojure?

(ns power.examples)
(defn non-acc-pow [base exp]
  (if (zero? exp)
    1
    (* base (non-acc-pow base (dec exp)))))
(defn acc-pow [base exp]
  (letfn [(loop [base exp acc]
            (if (zero? exp)
              acc
              (recur base (dec exp) (* base acc))))]
    (loop base exp 1)))
(defn lazy-pow [base exp]
  (letfn [(loop [cur]
            (cons cur (lazy-seq (loop (* cur base)))))]
    (nth (take exp (loop base)) (dec exp))))
(defn iter-pow [base exp]
  (nth (take exp (iterate (partial * base) base)) (dec exp)))
(defn apply-pow [base exp]
  (apply * (repeat exp base)))
(= 16
   (non-acc-pow 2 4)
   (acc-pow 2 4)
   (lazy-pow 2 4)
   (iter-pow 2 4)
   (apply-pow 2 4))

Leave a Reply

Your email address will not be published. Required fields are marked *