我只是试图向别人展示懒惰,并且我编写了一个简单的递归函数来处理列表。在Clojure中,我如何编写自己的递归函数来处理懒惰列表?
我认为这将是一个无限大名单上的罚款。但是突然间我发现了一个“太多递归”的内部错误。
咦?我总是编写这样的代码。有什么问题?
当然不过,通常我使用像map
内置功能的其他列表处理功能的基础。这次我试图编写自己的递归遍历。当然,这不可能奏效。
这是我写的。
(defn q [xs]
(if (empty? xs)()
(cons (* (first xs) (first xs)) (q (rest xs)))))
(take 10 (q (cycle '(1 2 3 4))))
那么,事实上,我怎么写我自己的遍历函数,可以处理Clojure中的惰性数据结构呢?是否有某种类似的“收益”?
见https://clojuredocs.org/clojure.core/lazy-seq –