Имеется список / дерево в форме: (узел1 (узел2) (узел3 (узел4) (узел5)) (узел6))
Я должен быть в состоянии выяснить глубину, на которой находится искомый узел.
Это то, что я сделал до сих пор:
(defun search-it (lst level n)
(cond ((null lst) nil)
((and (atom (car lst)) (equal (car lst) n)) level)
((atom (car lst)) (search-it (cdr lst) level n))
(t (cons (search-it (car lst) (+ 1 level) n)
(search-it (cdr lst) level n)))))
(defun search-node (l n)
(search-it l 0 n))
Для этой конкретной реализации у меня есть правильное решение, но меня беспокоит то, что я не могу избавиться от некоторых нулевых списков. Например:
(search-node '(1 (2) (3 (4) (6) (7) (8 (9) (10)))) 6)
(NIL (NIL 2 NIL (NIL NIL)))
Решение будет правильным, если мы рассмотрим корневой узел на глубине 0.
Теперь, конечно, я мог бы добавить код в функцию search-node , чтобы удалить все, кроме решений, я не могу не чувствовать, что это не самый элегантный способ сделать это.
LE : ожидаемый результат должен быть глубиной или списком глубин, если число появляется более одного раза.
Кто-нибудь указывает на кого-нибудь?
PS: lisp newbie