В исходном списке заменить все элементы-целые числа остатками от их деления на 2 - Lisp

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

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

Помогите, пожалуйста, решить задание по

!рекурсии!

на Common Lispe: Написать программу, которая в исходном списке заменяет все элементы-целые числа остатками от их деления на 2. Список может содержать подсписки произвольной глубины вложения.

Решение задачи: «В исходном списке заменить все элементы-целые числа остатками от их деления на 2»

textual
Листинг программы
(defun rems (w)
  (loop for a in w
        if (listp a) collect (rems a)
        else if (integerp a) collect (rem a 2)
        else collect a))
 
> (rems '(a 2 (3) 8))
(A 0 (1) 0)

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

  1. Создается функция rems с одним аргументом w.
  2. В функции используется цикл loop, который проходит по каждому элементу a из списка w.
  3. Если элемент a является списком, то он передается в функцию rems рекурсивно.
  4. Если элемент a является целым числом, то он передается в функцию rem для получения остатка от деления на 2.
  5. Если элемент a не является списком или целым числом, то он просто добавляется в результат.
  6. Результатом работы функции rems будет список, в котором каждый элемент получен в результате обработки каждого элемента исходного списка.
  7. Пример использования функции: (rems '(a 2 (3) 8)).
  8. Результат выполнения примера: (A 0 (1) 0).
  9. Значение первого элемента результата: (A 0).
  10. Значение второго элемента результата: (1).
  11. Значение третьего элемента результата: (0).

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

15   голосов , оценка 3.6 из 5
Похожие ответы