В произвольном списке (со вложенностью) все отрицательные элементы умножить на -2, все 0 заменить на (1 1) - Lisp

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

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

в произвольном списке (со вложенностью) все отрицательные элементы умножить на -2, все 0 заменить на (1 1). например (-1 1 0 2 -3) => (-2 1 (1 1)2 6) (-1 (-1 (-1 0 1) 1) 2) => (2 (2 (2 (1 1) 1) 1) 2)

Решение задачи: «В произвольном списке (со вложенностью) все отрицательные элементы умножить на -2, все 0 заменить на (1 1)»

textual
Листинг программы
  1. (defun change (w)
  2.   (loop for a in w
  3.         if (atom a)
  4.         collect (cond ((minusp a) (* a -2))
  5.                       ((zerop a) '(1 1))
  6.                       (t a))
  7.         else collect (change a)))
  8.  
  9. > (change '(-1 1 0 2 -3))
  10. (2 1 (1 1) 2 6)
  11. > (change '(-1 (-1 (-1 0 1) 1) 2))
  12. (2 (2 (2 (1 1) 1) 1) 2)

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

В коде определён функцией change с одним аргументом w. Внутри функции используется цикл loop, который выполняет следующие действия:

  1. Цикл проходит по каждому элементу списка w.
  2. Если элемент является атомом, то проверяется его значение: — Если элемент отрицательный, то он умножается на -2. — Если элемент равен 0, то он заменяется на (1 1). — Во всех остальных случаях рекурсивно вызывается функция change для элемента.
  3. Все остальные элементы списка собираются в новый список. В конце функции возвращается полученный список. Примеры вызовов функции change: — change '(-1 1 0 2 -3) вернёт (2 1 (1 1) 2 6). — change '(-1 (-1 (-1 0 1) 1) 2) вернёт (2 (2 (2 (1 1) 1) 1) 2).

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


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

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

8   голосов , оценка 3.5 из 5

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

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

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