Разбиение списков на атомы - Lisp

Узнай цену своей работы

Формулировка задачи:

не могу никак вникнуть в этот лисп помогите плз. Написать программу разбиения списков на атомы и превращения атомов в списки на каждом уровне. Если список содержит подсписки, то его не разбивать на атомы. Пример
Листинг программы
  1. ((a b) (c ( d e)) f) --> (a b ((c) d e) (f))
  2. (a (b (c)d) e(((f)))) ==> ((a) ((b) c (d))(e)((((f)))))

Решение задачи: «Разбиение списков на атомы»

textual
Листинг программы
  1. (defun inside-out (w)
  2.   (loop for a in w
  3.         if (and (listp a) (every #'atom a)) nconc a
  4.         else collect (if (atom a) (list a) a)))
  5.  
  6. > (inside-out '((a b) (c ( d e)) f))
  7. (A B (C (D E)) (F))
  8. > (inside-out '(a (b (c) d) e (((f)))))
  9. ((A) (B (C) D) (E) (((F))))

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

  1. Функция inside-out принимает один аргумент w.
  2. Вложенным циклом loop проходим по каждому элементу a аргумента w.
  3. Если элемент a является списком и все его элементы являются атомами, то добавляем его в результат.
  4. Если элемент a является атомом, то добавляем его в результат в виде списка с одним элементом.
  5. Результат выводится на экран.

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


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

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

10   голосов , оценка 3.9 из 5

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

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

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