Clojure 微调range的懒惰
此代码:Clojure 微调range的懒惰,clojure,lazy-evaluation,Clojure,Lazy Evaluation,此代码: (first (map (fn [d] (apply * (repeat d 10))) (range))) Yeals是一个整数溢出异常,而此代码: (first (map (fn [d] (apply * (repeat d 10))) (range 0 1))) 耶尔德1 两个代码都应该是1,但由于某种原因,范围的惰性有一种奇怪的行为。它似乎得到了大量的数据,而不是一次
(first (map (fn [d]
(apply * (repeat d 10)))
(range)))
Yeals是一个整数溢出异常,而此代码:
(first (map (fn [d]
(apply * (repeat d 10)))
(range 0 1)))
耶尔德1
两个代码都应该是1,但由于某种原因,范围的惰性有一种奇怪的行为。它似乎得到了大量的数据,而不是一次只得到一个。是否可以使范围以所需的方式运行?
作为性能优化,范围被分块。有几种方法可以解决这个问题,包括使用(iterate inc 0)
或unchunk
(有几个版本,这个版本是复制自)
范围
被分块,作为性能优化。有几种方法可以解决这个问题,包括使用(iterate inc 0)
或unchunk
(有几个版本,这个版本是复制自)
范围
被分块,作为性能优化。有几种方法可以解决这个问题,包括使用(iterate inc 0)
或unchunk
(有几个版本,这个版本是复制自)
范围
被分块,作为性能优化。有几种方法可以解决这个问题,包括使用(iterate inc 0)
或unchunk
(有几个版本,这个版本是复制自)
好的,我刚刚意识到我的问题是重复的。但是,无论如何,我认为它应该被接受,因为它更直接。它比另一个更好作为参考。好的,我刚刚意识到我的问题是重复的。但是,无论如何,我认为它应该被接受,因为它更直接。它比另一个更好作为参考。好的,我刚刚意识到我的问题是重复的。但是,无论如何,我认为它应该被接受,因为它更直接。它比另一个更好作为参考。好的,我刚刚意识到我的问题是重复的。但是,无论如何,我认为它应该被接受,因为它更直接。它比另一个更好地作为参考。
(defn unchunk
[s]
(lazy-seq
(when (seq s)
(cons (first s)
(unchunk (rest s))))))
user=> (first (map (fn [d]
(apply * (repeat d 10)))
(unchunk (range)))
1