不会发生对BigDecimal的促销

时间:2013-08-21 08:30:11

标签: clojure

我正在使用Clojure 1.5.1。这是我的计划:

(def bricks4
  (memoize (fn [n]
             (cond (> 0 n) 0
                   (= 0 n) 1
                   (= 1 n) 1
                   :else (+ (bricks4 (- n 1))
                            (bricks4 (- n 2))
                            (bricks4 (- n 3))
                            (bricks4 (- n 4)))))))

(blocks4 70)抛出异常:

ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1388) 

我很困惑,因为我认为Clojure会自动将数字从Integer推广到Long再到BigDemical。

我该怎么做才能修复这个程序?

1 个答案:

答案 0 :(得分:6)

Clojure自1.2以来没有自动升级为bigint,这就像......三年前?这些天默认情况下是为了获得更好的效果,但您可以使用+'代替+*'代替*来获得自动促销行为,依此类推。