int*_*tar 3 recursion clojure lazy-evaluation
我只是想向某人展示懒惰,我写了一个简单的递归函数来处理一个列表.
我认为在无限列表中它会很好.但突然间我发生了"过多的递归"内部错误.
咦?我总是编写代码来做那种事情.有什么问题?
但是,当然,通常我使用内置函数map作为其他列表处理函数的基础.这次我试图编写自己的递归遍历.当然,这不可行.
这是我写的.
(defn q [xs]
(if (empty? xs) ()
(cons (* (first xs) (first xs)) (q (rest xs)) )))
(take 10 (q (cycle '(1 2 3 4))))
Run Code Online (Sandbox Code Playgroud)
那么,实际上我是如何编写自己的遍历函数来处理Clojure中的惰性数据结构的呢?是否存在某种"收益率"的等价物?
(defn q [xs]
(if (empty? xs) ()
(lazy-seq ;; <- here's our magic!
(cons (* (first xs) (first xs)) (q (rest xs)) ))))
(take 10 (q (cycle '(1 2 3 4))))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |