次の内容の入力ファイルがあります。
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 []))
しかし、私の知る限り、Clojure では JVM の TCO が不足しているため、再帰関数は慣用的ではありません。
この問題を解決するより良い方法はありますか?