Дано 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
Листинг программы
  1. (defun reord-tree (tree)
  2.   (cond ((null tree) nil)
  3.         (t (let ((l (car tree))
  4.                  (v (cadr tree))
  5.                  (r (caddr tree)))
  6.                 (list (reord-tree r) v (reord-tree l))))))
  7.  
  8. ==> reord-tree
  9.  
  10. (reord-tree '(((nil 1 nil) 5 (nil 7 nil)) 10 (nil 15 (nil 16 nil))))
  11.  
  12. ==> (((NIL 16 NIL) 15 NIL) 10 ((NIL 7 NIL) 5 (NIL 1 NIL)))

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

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

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

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


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

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

13   голосов , оценка 4.154 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы