Lisp! Определите функцию, удаляющую из списка все четные числа
Формулировка задачи:
Определите функцию, удаляющую из списка все четные числа.Решение должно быть составлено без использования функционалов и первоначальных элементов.Заранее спасибо)
Решение задачи: «Lisp! Определите функцию, удаляющую из списка все четные числа»
textual
Листинг программы
(defun task (lst) (let ((r nil)) (dolist (a lst (reverse r)) (unless (and (fixedp a) (evenp a)) (push a r))))) ==> TASK (task '(a 1 b 2 c 3 d 4)) ==> (A 1 B C 3 D) (defun task (lst) (let ((r nil)) (iter (for a in lst) (unless (and (fixedp a) (evenp a)) (collecting a into r))) r)) ==> TASK (task '(a 1 b 2 c 3 d 4)) ==> (A 1 B C 3 D)
Объяснение кода листинга программы
Функция удаляет из списка все четные числа.
- Создается функция с именем
task, которая принимает один аргументlst— список чисел. - В функции используется замыкание
let, чтобы создать переменнуюrдля хранения результата. - Используется цикл
dolist, чтобы перебрать каждый элемент вlst. - Внутри цикла используется условие
unless, чтобы проверить, является ли элемент четным числом. - Если элемент нечетный, он добавляется в
rс помощью функцииpush. - Результат
rвозвращается из функции. - Во втором варианте кода используется цикл
iter, чтобы перебрать каждый элемент вlst. - Внутри цикла используется условие
unless, чтобы проверить, является ли элемент четным числом. - Если элемент нечетный, он добавляется в
rс помощью функцииcollecting. - Результат
rвозвращается из функции.