我正在使用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。
我该怎么做才能修复这个程序?
发布于 2013-08-21 08:35:38
自从1.2,也就是几年前的like...three之后,Clojure就没有自动升级到bigint了?现在,默认情况是为了获得更好的性能,但是您可以通过使用+'而不是+、*'而不是*等来获得自动提升的行为。
https://stackoverflow.com/questions/18352488
复制相似问题