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