Все доброго времени суток всем. Что-то решил поиграться с двоичными деревьями, и возник у меня вопрос... что насчёт удаления определённой ноды (листа)... ясное дело, можно сделать это в стиле C или любого другого императивного ЯП, но меня интересует, можно ли это сделать как-либо красивее, применив, возможно, функциональную парадигму? сейчас у меня есть вот такие функции: ;; добавление листа/ноды (defun insert-node (tree new-node) (if (not tree) new-node (if (>= (first tree) (first new-node)) (list (first tree) (insert-node (second tree) new-node) (third tree)) (list (first tree) (second tree) (insert-node (third tree) new-node))))) ;; создание листа/ноды (defun make-node (element) (list element nil nil)) ;; собственно построение дерева (defun make-tree (elements) (reduce #'insert-node (map 'list #'make-node elements))) сразу скажу, я не заморачивался о сбалансированности, и строил дерево в лоб, самым простым способом... ну а теперь собственно буду ждать, может кто-нить подскажет, как удалить некий лист, самым красивым способом? :)