Разбиение списков на атомы - 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
является атомом, то добавляем его в результат в виде списка с одним элементом. - Результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д