[英]Clojure lazy-seq gives me ArithmeticException
我試圖重新實現我的自定義地圖功能,但是它以一種奇怪的方式工作。 有人可以解釋為什么會發生嗎?
(defn my-map [f coll]
(lazy-seq
(when-let [s (seq coll)]
(cons (f (first s)) (my-map f (rest s))))))
(take 10 (my-map inc (range)))
(take 10 (->> [0 1]
(iterate (fn [[a b]] [b (+ a b)]))
(my-map first)))
首先采取預期的效果,但是第二次出現以下錯誤(看起來像是在評估所有序列):
java.lang.ArithmeticException: integer overflow
Numbers.java:1388 clojure.lang.Numbers.throwIntOverflow
Numbers.java:1687 clojure.lang.Numbers.add
Numbers.java:430 clojure.lang.Numbers$LongOps.add
Numbers.java:126 clojure.lang.Numbers.add
沒錯,這是一個可疑的錯誤。 你應該在這里登錄
光工作台中的以下工作沒有問題
(->> [0 1]
(iterate (fn [[a b]] [b (+ a b)]))
(take 10)
(my-map first))
和
(take 10 (->> [0 1M]
(iterate (fn [[a b]] [b (+ a b)]))
(my-map first)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.