Clojure Library Recursion没有循环...复发

时间:2011-10-27 14:54:05

标签: clojure loops

我有一个关于迭代的问题和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 个答案:

答案 0 :(得分:4)

是的,每次在延迟序列中强制使用next元素时,都会调用一次iterate,因此没有(立即)递归,也没有堆栈消耗。