1. ホーム
  2. clojure

[解決済み] clojureで指数を計算するには?

2022-08-17 02:44:46

質問

clojureで指数計算を行うにはどうしたらよいでしょうか? 今のところ、私は整数の指数関数だけを必要としていますが、質問は分数にも当てはまります。

どのように解決するのですか?

古典的な再帰処理 (これを見てください、スタックが吹っ飛びます)

(defn exp [x n]
     (if (zero? n) 1
         (* x (exp x (dec n)))))

末尾再帰

(defn exp [x n]
  (loop [acc 1 n n]
    (if (zero? n) acc
        (recur (* x acc) (dec n)))))

機能的

(defn exp [x n]
  (reduce * (repeat n x)))

卑劣(スタックも吹っ飛ぶが、そう簡単には吹っ飛ばない)。

(defn exp-s [x n]
  (let [square (fn[x] (* x x))]
    (cond (zero? n) 1
          (even? n) (square (exp-s x (/ n 2)))
          :else (* x (exp-s x (dec n))))))

ライブラリ

(require 'clojure.contrib.math)