以下是 1.8.0 和 1.9.0-alpha14 不编译的错误,两个版本的错误相同。
`
user=> (def fibonacci-1
((fn fib [a b]
(lazy-seq (cons a (fib b (+ a b)))))
0 1))
user=> (filter #(< % 100) fibonacci-1)
算术异常:整数溢出 clojure.lang.Numbers.throwIntOverflow (Numbers.java:1501)
user=> (filter #(< % 100) fibonacci-1)
NullPointerException:堆栈溢出异常 clojure.lang.Numbers.ops (Numbers.java:1013)
user=> (def fibonacci-2
(lazy-cat [0 1] (map + (rest fibonacci-2) fibonacci-2)))
user=> (filter #(< % 100) fibonacci-2)
算术异常:整数溢出 clojure.lang.Numbers.throwIntOverflow (Numbers.java:1501)
user=> (filter #(< % 100) fibonacci-2)
(0 1 1 2 3 5 8 13 21 34 55 89)
`
补丁: 0001-CLJ-2069-cache-exceptions-thrown-during-lazy-seq-rea.patch
提议: 在实现懒惰序列期间缓存抛出的异常,以避免重新运行声明为 ^:once
的主体函数
预筛: Alex Miller