В исходном списке заменить все элементы-целые числа остатками от их деления на 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).