3
Я стараюсь writemy самостоятельно «пройти через дерево» функции, но я новичок в FPпрогулка по дереву функционально
Я написал эти функции, и она работает хорошо, но это выглядит некрасиво
(defrecord Tree [value left right])
(defn depth_walk_tree
[tree functor]
(let [item (functor (:value tree))]
(let [leftlst
(if (:left tree)
(cons item (depth_walk_tree (:left tree) functor))
(list item))
]
(if (:right tree)
(concat
leftlst
(depth_walk_tree (:right tree) functor))
leftlst))))
(def tree (Tree. 1 (Tree. 2 (Tree. 0 nil nil) (Tree. 90 nil nil)) (Tree. 3 nil (Tree. 10 nil nil))))
(println (depth_walk_tree tree #(+ % 1)))
Программы ответ
(2 3 1 91 4 11); is Ok
Может кто-нибудь посоветовать мне, как сделать это красота?
PS Извините за мои письменные ошибки. Английский язык не на моем родном языке.
так чисто! Я не знал, что concat передает «ноль». Спасибо. –
Функциональное программирование - все о простоте и элегантности :) –
Как бы вы избежали переполнения стека, вызванного рекурсией без хвоста? –