Написать функцию, которая линеаризует список с подсписками и одномерными массивами (векторами) - Lisp
Формулировка задачи:
Помогите, пожалуйста.
Решение задачи: «Написать функцию, которая линеаризует список с подсписками и одномерными массивами (векторами)»
textual
Листинг программы
- (defun flat (lst)
- (cond ((null lst) nil)
- ((vectorp (car lst)) (append (coerce (car lst) 'list) (flat (cdr lst))))
- ((atom (car lst)) (cons (car lst) (flat (cdr lst))))
- (t (append (flat (car lst)) (flat (cdr lst))))))
- ;; Проверка
- CL-USER 18 > (flat `(1 2 3 ,(vector 11 22 33)))
- (1 2 3 11 22 33)
- CL-USER 19 > (flat '(1 2 3 ((4 5) 6)))
- (1 2 3 4 5 6)
Объяснение кода листинга программы
Функция flat предназначена для линеаризации списка с подсписками и одномерными массивами (векторами). Что делает функция flat:
- Если список пуст, возвращается nil.
- Если первый элемент списка является вектором, то в список результатов добавляется этот вектор, а затем рекурсивно вызывается flat для остальных элементов списка.
- Если первый элемент списка является атомом, то он добавляется в список результатов, а затем рекурсивно вызывается flat для остальных элементов списка.
- Если первый элемент списка не является вектором или атомом, то рекурсивно вызывается flat для этого элемента и для остального списка.
- Результатом работы функции является список, в который добавлены все линеаризованные элементы исходного списка. Пример использования функции flat:
(1 2 3 ,(vector 11 22 33))
— результат(1 2 3 11 22 33)
.(1 2 3 ((4 5) 6))
— результат(1 2 3 4 5 6)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д