2011-10-27 55 views
4

我有一个关于迭代和Clojure库funcs实现类似迭代的问题。Clojure库递归没有循环... recur

(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))))) 

没有环...易复发不重复,不是因为它是在一个慵懒的序列操作消耗它的堆栈?

回答

4

是的,每当你强迫下一个元素处于惰性序列时,iterate被调用一次,因此没有(即时)递归,也没有堆栈消耗。