簡體   English   中英

Clojure lazy-seq給了我ArithmeticException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM