私はいくつかのLISP関数をClojureに移行しています。Clojureで最も入れ子になったリストを取得する
(defn m
[list depth]
(cond
(= list nil) depth
(atom (first list)) (m (rest list) depth)
(> (m (first list) (+ depth 1)) (m (rest list) depth)) (m (first list) (+ depth 1))
:default (m (rest list) depth))
)
(defn n
[list depth maxdepth]
(cond
(= list nil) nil
(= depth maxdepth) list
(atom (first list)) (n (rest list) depth maxdepth)
(= 0 (n (first list) (+ depth 1) maxdepth)) (n (last list) depth maxdepth)
:default (n (first list) (+ depth 1) maxdepth))
)
(defn myfind[mylist]
(n mylist 0 (m mylist 0))
)
私は基本的にしたいことのように、ほとんどのネストされたリストの出力です:
(myfind '(1 2 3 (4 5) 6 ((7 8) 9)))
=> (7 8)
目標は、再帰を使用して最小化することで、私は、次の機能のためにStackOverflowのメッセージに問題がありますそれを達成するための組み込み関数の使用。
この場合、何が間違っていますか?
'clojure.core /原子 ([X] [X&オプション]) を作成して初期のxの値と、ゼロ又はそれ以上の options'でアトムを返す... – cfrick
Iを除去している原子そして私はまだスタックオーバーフローを取得し、出力は次のとおり にStackOverflowError \t ppj.core/M(フォームinit7572722406191330769.clj:4) \t ppj.core/M(フォームinit7572722406191330769.clj:6) ... これを解決する方法は非常に歓迎されています:) – Munger
lこれを解決するライブラリ関数? – OlegTheCat