我有一个关于迭代的问题和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会迭代不使用它的堆栈,因为它是在一个惰性序列上运行的吗?
答案 0 :(得分:4)
是的,每次在延迟序列中强制使用next元素时,都会调用一次iterate,因此没有(立即)递归,也没有堆栈消耗。