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