В исходном списке заменить все элементы-целые числа остатками от их деления на 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)
Объяснение кода листинга программы
- Создается функция
rems
с одним аргументомw
. - В функции используется цикл
loop
, который проходит по каждому элементуa
из спискаw
. - Если элемент
a
является списком, то он передается в функциюrems
рекурсивно. - Если элемент
a
является целым числом, то он передается в функциюrem
для получения остатка от деления на 2. - Если элемент
a
не является списком или целым числом, то он просто добавляется в результат. - Результатом работы функции
rems
будет список, в котором каждый элемент получен в результате обработки каждого элемента исходного списка. - Пример использования функции:
(rems '(a 2 (3) 8))
. - Результат выполнения примера:
(A 0 (1) 0)
. - Значение первого элемента результата:
(A 0)
. - Значение второго элемента результата:
(1)
. - Значение третьего элемента результата:
(0)
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д