"Склеить" 2 заданных узла дерева, если они соседние; иначе вернуть nil - Lisp
Формулировка задачи:
Добрый вечер! Помогите пожалуйста с заданием.
Необходимо определит функцию у которой аргументами является дерево и 2 его вершины.
Нужно "склеить" 2 заданных узла если они соседние. Если не соседние то выдать NIL.
К примеру мы задаем вершины 1 и 3(они соседние):
Наше Дерево
Дерево задается следующим образом : (1 (2 (4) (5)) (3 (6) (7)))
На выходе при "склеивании" должно получится: (1 (2 (4) (5)) (6 (7)))
ну и соответственно дерево имеет вид:
Вот такая вот непонятная задача....
Листинг программы
- 1
- / \
- 2 3
- / \ / \
- 4 5 6 7
Листинг программы
- 1
- / \
- 2 6
- / \ \
- 4 5 7
Решение задачи: «"Склеить" 2 заданных узла дерева, если они соседние; иначе вернуть nil»
textual
Листинг программы
- (defun kley (tree v2)
- (COND
- ((null tree) NIL)
- ((and (atom (car tree)) (eq (car tree) v2)) (cdr tree))
- ((and (atom (car tree))) (cons (car tree) (kley (cdr tree) v2)))
- ((listp (car tree)) (cons (kley (car tree) v2) (kley (cdr tree) v2)))))
Объяснение кода листинга программы
В данном коде представлена функция с именем kley, которая принимает два аргумента: tree и v2. Функция предназначена для склеивания двух соседних узлов дерева, если они являются атомами и равны друг другу. В противном случае, функция возвращает NIL. Давайте разберем код по шагам:
- Функция начинается с определения с помощью defun.
- В тело функции попадает два аргумента: tree и v2.
- Далее следует условная конструкция cond, которая проверяет три возможных случая.
- Первый случай: если tree равно NIL, то функция возвращает NIL.
- Второй случай: если tree является атомом и равно v2, то функция возвращает cdr tree.
- Третий случай: если tree является атомом, то функция склеивает car tree и v2, а затем рекурсивно вызывает функцию kley для cdr tree и v2.
- Четвертый случай: если tree является списком, то функция рекурсивно вызывает kley для car tree и v2, а затем склеивает результаты и вызывает kley для cdr tree и v2. Таким образом, функция kley склеивает два соседних узла дерева, если они являются атомами и равны друг другу. В противном случае, функция возвращает NIL.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д