Я переношу некоторые функции LISP в Clojure. У меня есть проблемы с StackOverflow сообщение для следующих функций:Получение самого вложенного списка в 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)
Цель состоит в том, чтобы использовать рекурсию и минимизировать использование встроенных функций для достижения этого.
Что не так в этом случае?
'clojure.core/атом ([х] [х & опции]) Создает и возвращает Atom с начальным значением х и нулевой или более options' ... – cfrick
Я удалил атом и я все еще получаю переполнение стека, выход: StackOverflowError \t ppj.core/м (форма-init7572722406191330769.clj: 4) \t ppj.core/м (форма-init7572722406191330769.clj: 6) ... Все идеи, как решить эту проблему, очень приветствуются :) – Munger
Можете ли вы привести причину, почему вы не будете использовать l ib функции для решения этого? – OlegTheCat