Clojure库循环无需loop...recur

4

我有一个关于迭代和Clojure库函数的问题,这些函数实现类似于迭代。

(defn iterate
2     "Returns a lazy sequence of x, (f x), (f (f x)) etc. f must be free of side-effects"
3     {:added "1.0"
4      :static true}
5     [f x] (cons x (lazy-seq (iterate f (f x)))))

不使用循环的话,recur在操作惰性序列时不会消耗其堆栈吗?
1个回答

4
是的,每次你强制执行延迟序列中的下一个元素时,迭代函数只会被调用一次,因此没有(立即的)递归,也不会占用堆栈空间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接