Дано 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)))
Объяснение кода листинга программы
В данной программе реализован рекурсивный алгоритм перестановки элементов в поддеревьях, которые находятся на одном уровне. Для этого используется следующая последовательность шагов:
- Проверяется базовый случай, когда дерево пустое. В этом случае возвращается пустой список.
- Если дерево не пустое, то из него выделяются три элемента: левый поддерево, узел и правое поддерево.
- Затем вызывается рекурсивная функция для левого и правого поддеревьев, чтобы поменять их местами.
- Результатом работы функции является список, в котором первые два элемента — это переставленные поддеревья, а третий элемент — это узел.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д