Дано S-выражение, представляющее дерево вида «(РебенокЛевый Родитель РебенокПравый)» - Lisp

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

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

Консольное приложение, язык Лисп (компилятор CLisp) Составить программу, считывающую из файла "input.txt" три строки текста, в которых записаны ис- ходные данные для 3-х заданий. Если в задаче данные не требуются, строка будет пустой, т.е. состоять только из символа перевода строки. Программа записывает в файл "output.txt" результат вычисления каждой задачи так же, в 3-х строках. Ничего кроме результата каждой из 3-х функций ни на экран, ни в файл выводиться не должно. Задача: Дано S-выражение, представляющее дерево вида «(РебенокЛевый Родитель РебенокПравый)» с числами в качестве вершин, причём дерево упорядочено по возрастанию. Определить функцию, изменяющую направление упорядочивания этого дерева. Например: если дано "(((nil 1 nil) 5 (nil 7 nil)) 10 (nil 15 (nil 16 nil)))", ответом будет "(((nil 16 nil) 15 nil) 10 ((nil 7 nil) 5 (nil 1 nil)))".

Решение задачи: «Дано S-выражение, представляющее дерево вида «(РебенокЛевый Родитель РебенокПравый)»»

textual
Листинг программы
(defun reord-tree (tree)
  (cond ((null tree) nil)
        (t (let ((l (car tree))
                 (v (cadr tree))
                 (r (caddr tree)))
                (list (reord-tree r) v (reord-tree l)))))) 
 
==> reord-tree
 
(reord-tree '(((nil 1 nil) 5 (nil 7 nil)) 10 (nil 15 (nil 16 nil))))
 
==> (((NIL 16 NIL) 15 NIL) 10 ((NIL 7 NIL) 5 (NIL 1 NIL)))

Объяснение кода листинга программы

В данной программе реализован рекурсивный алгоритм перестановки элементов в поддеревьях, которые находятся на одном уровне. Для этого используется следующая последовательность шагов:

  1. Проверяется базовый случай, когда дерево пустое. В этом случае возвращается пустой список.
  2. Если дерево не пустое, то из него выделяются три элемента: левый поддерево, узел и правое поддерево.
  3. Затем вызывается рекурсивная функция для левого и правого поддеревьев, чтобы поменять их местами.
  4. Результатом работы функции является список, в котором первые два элемента — это переставленные поддеревья, а третий элемент — это узел.

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


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

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

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