转换为循环...重复递归

oct*_*bus 6 clojure

据我所知,在不使用循环的情况下在Clojure中递归.对于短序列,recur语法可能不是问题.但是,使用loop .. recur语法是编写递归函数的首选方法.所以,我想从首选方法开始.

但是,我一直在努力转换这个函数[edit],它返回一个序列的骨架(序列结构没有它的值)

(defn skl
  [tree]
  (map skl (filter seq? tree)))
Run Code Online (Sandbox Code Playgroud)

用这些数据测试过

(def test_data1 '(1 (2 3) ( ) (( )) :a))
(def test_data2 '(1 2 (3 4) (5 ( 6 7 8))))
Run Code Online (Sandbox Code Playgroud)

循环..重复语法.任何想法或指向示例的指针将不胜感激.

Art*_*ldt 3

您可能想研究一下拉链库,它允许良好的结构化树编辑,尽管它可能不如您原来的那么优雅。我几乎从不需要使用循环...重复。几乎总是存在一个高阶函数可以以相同或更好的效率更优雅地解决问题。

替换maploop ... recur会使代码更加冗长且不太清晰。您还会失去分块序列的好处。