[英]Clojure lazy-seq gives me ArithmeticException
I am trying to re-implement my custom map function, but it works in a strange way. 我试图重新实现我的自定义地图功能,但是它以一种奇怪的方式工作。 Could some one explain why it happens?
有人可以解释为什么会发生吗?
(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)))
First take works as expected, but second gives me following error (looks like it evaluating all sequence): 首先采取预期的效果,但是第二次出现以下错误(看起来像是在评估所有序列):
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.