2013-08-21 54 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,就像......三年前一樣?這些天默認爲更好的性能,但您可以通過使用+'而不是+,*'而不是*等等來獲得自動升級行爲。

相關問題