我有一个包含以下内容的输入文件:
2
stuff-11
stuff-12
3
stuff-21
stuff-22
stuff-23
1
stuff-31
我想得到以下结果:
([stuff-11 stuff-12] [stuff-21 stuff-22 stuff-23] [stuff-31])
我最初的解决方案是使用带有累加器的递归,如下所示:
(defn parse-input [lines accum]
(if (= 0 (count lines))
accum
(let [[line-num (Integer. (first lines))]
[head tail] (split-at (+ 1 line-num) lines)]
[stuff (vec (drop 1 head))]]
(parse-input tail (concat accum [stuff]))))
(def result (parse-input input []))
但是,据我了解,由于 JVM 上缺乏 TCO,递归函数在 Clojure 中并不惯用。
有没有更好的方法来解决这个问题?