RosettaCodeData/Task/Exponentiation-order/Clojure/exponentiation-order.clj

14 lines
395 B
Clojure

(use 'clojure.math.numeric-tower)
;; (5**3)**2
(expt (expt 5 3) 2) ; => 15625
;; 5**(3**2)
(expt 5 (expt 3 2)) ; => 1953125
;; (5**3)**2 alternative: use reduce
(reduce expt [5 3 2]) ; => 15625
;; 5**(3**2) alternative: evaluating right-to-left with reduce requires a small modification
(defn rreduce [f coll] (reduce #(f %2 %) (reverse coll)))
(rreduce expt [5 3 2]) ; => 1953125