Найти наибольший по модулю элемент последовательности - Lisp
Формулировка задачи:
с помощью функции map найти наибольший по модулю элемент последовательности.
Решение задачи: «Найти наибольший по модулю элемент последовательности»
textual
Листинг программы
(defun task-8 (lst) (let ((ma (apply 'max (mapcar 'abs lst)))) (remove-if-not #'(lambda (x) (= (abs x) ma)) lst))) ==> task-8 (task-8 '(1 -5 8 -20 30 3 -50 4 50 50)) ==> (-50 50 50)
Объяснение кода листинга программы
В коде определена функция Task-8, которая принимает в качестве аргумента список lst.
- Создана переменная ma, в которую будет помещено максимальное значение из списка lst, но с учетом только абсолютных значений. Для этого используется функция apply, которая применяет функцию max к списку, полученному с помощью функции mapcar, которая применяет функцию abs к каждому элементу списка lst.
- Встроенная функция remove-if-not используется для удаления из списка lst всех элементов, которые не удовлетворяют условию, определенному с помощью лямбда-функции. Лямбда-функция проверяет, равно ли абсолютное значение текущего элемента ma.
- Результатом работы функции Task-8 является список, содержащий только элементы из исходного списка lst, у которых абсолютное значение равно max среди всех абсолютных значений списка lst. Пример использования функции Task-8: (task-8 '(1 -5 8 -20 30 3 -50 4 50 50)) Результат выполнения: (-50 50 50)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д