Я новичок в clojure и в настоящее время борется с loop/recur
. Вопрос в основном заключается в том, почему мой «пользовательский» range
func. не возвращает ленивую последовательность. Что-то не так с моей реализацией, или вы не должны использовать рекурсию в этом случае?Создать lazy seq с рекурсией в Clojure?
(defn my-range
[nr]
(loop [l nr acc '()]
(if (< l 1)
acc
(recur (dec l) (conj acc l)))))
Когда я запускаю его:
> (time (take 10 (my-range 100000))) ;; "Elapsed time: 85.443 msecs"
> (time (take 10 (range 100000))) ;; "Elapsed time: 0.095 msecs"
Разница очень большое время заставляет меня верить в список сначала построили, а затем 10 приняты.
Стандартный 'диапазон' начинается с' 0', а не '1'. Это не влияет на проблему. – Thumbnail