2

我正在使用 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)))))))

(bricks4 70) 抛出异常:

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

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

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

4

1 回答 1

6

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

于 2013-08-21T08:35:38.490 回答