【发布时间】:2017-07-19 14:22:45
【问题描述】:
我尝试通过 defmulti 和 defmethod 计算阶乘。
(defmulti factorial identity)
(defmethod factorial 0 [_] 1)
(defmethod factorial :default [num]
(* num (factorial (dec num))))
它适用于小数字
(-> 10 factorial) ;;3628800
(-> 2 factorial) ;; 2
它显示阶乘 40 的整数溢出异常
(-> 40 factorial)
ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow
我的好奇心是
我们如何使用 defmulti 和 defmethod 计算大数的阶乘?
【问题讨论】:
-
轻微唠叨:
(-> x factorial)比(factorial x)更难阅读。线程宏很棒,但在所有事情上都使用它们是大材小用
标签: clojure