1
Я пытаюсь повторно реализовать свою пользовательскую функцию карты, но это работает странным образом. Может кто-нибудь объяснить, почему это происходит?Clojure lazy-seq дает мне 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
Проблема была в легкой таблице, в простом РЕПЛ он работает, как ожидалось. –