"Склеить" 2 заданных узла дерева, если они соседние; иначе вернуть nil - Lisp

Узнай цену своей работы

Формулировка задачи:

Добрый вечер! Помогите пожалуйста с заданием. Необходимо определит функцию у которой аргументами является дерево и 2 его вершины. Нужно "склеить" 2 заданных узла если они соседние. Если не соседние то выдать NIL. К примеру мы задаем вершины 1 и 3(они соседние): Наше Дерево
 
                1
             /      \
            2        3
          /   \     /   \
         4     5  6      7
Дерево задается следующим образом : (1 (2 (4) (5)) (3 (6) (7))) На выходе при "склеивании" должно получится: (1 (2 (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. Давайте разберем код по шагам:

  1. Функция начинается с определения с помощью defun.
  2. В тело функции попадает два аргумента: tree и v2.
  3. Далее следует условная конструкция cond, которая проверяет три возможных случая.
  4. Первый случай: если tree равно NIL, то функция возвращает NIL.
  5. Второй случай: если tree является атомом и равно v2, то функция возвращает cdr tree.
  6. Третий случай: если tree является атомом, то функция склеивает car tree и v2, а затем рекурсивно вызывает функцию kley для cdr tree и v2.
  7. Четвертый случай: если tree является списком, то функция рекурсивно вызывает kley для car tree и v2, а затем склеивает результаты и вызывает kley для cdr tree и v2. Таким образом, функция kley склеивает два соседних узла дерева, если они являются атомами и равны друг другу. В противном случае, функция возвращает NIL.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы