Разбиение списков на атомы - Lisp
Формулировка задачи:
не могу никак вникнуть в этот лисп помогите плз.
Написать программу разбиения списков на атомы и превращения атомов в списки на каждом уровне. Если список содержит подсписки, то его не разбивать на атомы.
Пример
((a b) (c ( d e)) f) --> (a b ((c) d e) (f)) (a (b (c)d) e(((f)))) ==> ((a) ((b) c (d))(e)((((f)))))
Решение задачи: «Разбиение списков на атомы»
textual
Листинг программы
(defun inside-out (w) (loop for a in w if (and (listp a) (every #'atom a)) nconc a else collect (if (atom a) (list a) a))) > (inside-out '((a b) (c ( d e)) f)) (A B (C (D E)) (F)) > (inside-out '(a (b (c) d) e (((f))))) ((A) (B (C) D) (E) (((F))))
Объяснение кода листинга программы
- Функция
inside-out
принимает один аргументw
. - Вложенным циклом
loop
проходим по каждому элементуa
аргументаw
. - Если элемент
a
является списком и все его элементы являются атомами, то добавляем его в результат. - Если элемент
a
является атомом, то добавляем его в результат в виде списка с одним элементом. - Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д