Работа со списками - Lisp (229163)
Формулировка задачи:
Нужна помощь с задачей: написать функцию, которая принимает целое число и возвращает из заданного списка с подсписками и массивами наименьшее из четных чисел, больших аргумента
Решение задачи: «Работа со списками»
textual
Листинг программы
- (defun task (lst n)
- (let ((a
- (remove-if-not (lambda (y) (and (numberp y) (evenp y) (> y n)))
- (mapcar (lambda (x)
- (cond ((listp x) (task x n))
- ((numberp x) x)
- (t nil))) lst))))
- (if (null a) nil (apply 'min a))))
- ==> TASK
- (task '(57 (57 71) ((11 44 55 55) (22 33 44 55))) 33)
- ==> 44
Объяснение кода листинга программы
В данном коде определен функционал для работы со списками. Пример использования:
- Создана функция
task
, которая принимает два аргумента: lst (список) и n (число). - Внутри функции используется
let
для создания двух переменных: a и b. Значение переменной a будет определяться в зависимости от условий, а значение переменной b будет равно результату работы функцииmapcar
, которая применяет указанную анонимную функцию к каждому элементу списка lst. - Анонимная функция, применяемая к каждому элементу списка lst, проверяет, является ли элемент числом и четным, и если да, то рекурсивно вызывает функцию
task
для этого элемента и n, или возвращает само число, если элемент является числом, но не является четным, или возвращаетnil
, если элемент не является числом. - Результатом работы функции
mapcar
будет список, состоящий из результатов применения анонимной функции к каждому элементу списка lst. - Если результат работы функции
mapcar
не являетсяnil
, то возвращается минимальное значение из этого списка. Если результат работы функцииmapcar
являетсяnil
, то возвращаетсяnil
. Код вызывается с аргументами: lst = '(57 (57 71) ((11 44 55 55) (22 33 44 55))) и n = 33. Результатом работы кода будет число 44.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д