2013-08-21 33 views
2

我正在使用Clojure 1.5.1。下面是我的程序:升级到BigDecimal不会发生

(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))))))) 

(bricks4 70)抛出异常:

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

我很困惑,因为我认为的Clojure将自动从整数促进数字来龙,然后到BigDemical。

我应该怎么做才能修复此程序?

回答

6

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

相关问题