不会发生对BigDecimal的促销

ses*_*esm 2 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)))))))
Run Code Online (Sandbox Code Playgroud)

(blocks4 70)抛出异常:

ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1388) 
Run Code Online (Sandbox Code Playgroud)

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

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

ama*_*loy 6

自1.2以来,Clojure并没有自动升级到bigint,这就像......三年前?这些天,默认为获得更好的性能,但是你可以通过使用获得自动推进的行为+',而不是+,*'不是*,等等.