Дерево, вычисление максимального пути - Lisp
Формулировка задачи:
- (defun glubina(tree)
- (cond ((NULL tree)
- 0)
- ( T
- (+ 1 (max (glubina (cadr tree)) (glubina(cddr tree)))))
- )
- )
- (defun way(tree spisok)
- (cond ((NULL tree)
- spisok)
- ( ( > (glubina (cadr tree)) (glubina (caddr tree)))
- (way (cadr tree) (append spisok (list(car tree)))))
- ( T
- (way (caddr tree) (append spisok (list(car tree)))))
- )
- )
- (defun test ()
- (way '(a (b (d) (e)) (c (g (h (i)) (k)))) '())
- )
Решение задачи: «Дерево, вычисление максимального пути»
- ;; небольшой довесок:
- (defun task (tree setv)
- (let ((p (max-len-path tree)))
- (car (remove-if-not (lambda (x) (every (lambda (y) (member y x)) setv)) p))))
- ==> task
- (task '(((nil c nil) a ((nil g nil) d nil)) r ((nil e (nil h nil)) b (nil f nil))) '(b e))
- ==> (r b e h)
- (task '(((nil c nil) a ((nil g nil) d nil)) r ((nil e (nil h nil)) b (nil f nil))) '(a d))
- ==> (r a d g)
Объяснение кода листинга программы
В коде определена функция task
, которая принимает два аргумента: tree
и setv
.
Список tree
представляет собой дерево, где каждый узел является списком, содержащим дочерние узлы, представленные в виде списков, и значения, представленные в виде атомов.
Функция setv
принимает один аргумент и возвращает список, содержащий значения, которые соответствуют вершинам дерева.
В функции task
создается переменная p
, которая инициализируется максимальным количеством вершин в дереве.
Затем используется функция remove-if-not
, которая удаляет все элементы из списка p
, которые не соответствуют условию. Условие задается с помощью лямбда-функции, которая проверяет, содержит ли каждый элемент списка setv
все вершины дерева.
Наконец, функция возвращает первый элемент списка p
, который является максимальным путем в дереве.
Пример использования функции task
показывает, как она применяется к двум спискам: (((nil c nil) a ((nil g nil) d nil)) r ((nil e (nil h nil)) b (nil f nil)))
и setv
в качестве аргументов. В первом примере максимальным путем является (r b e h)
, а во втором примере — (r a d g)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д