Найти наибольший по модулю элемент последовательности - 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.

  1. Создана переменная ma, в которую будет помещено максимальное значение из списка lst, но с учетом только абсолютных значений. Для этого используется функция apply, которая применяет функцию max к списку, полученному с помощью функции mapcar, которая применяет функцию abs к каждому элементу списка lst.
  2. Встроенная функция remove-if-not используется для удаления из списка lst всех элементов, которые не удовлетворяют условию, определенному с помощью лямбда-функции. Лямбда-функция проверяет, равно ли абсолютное значение текущего элемента ma.
  3. Результатом работы функции Task-8 является список, содержащий только элементы из исходного списка lst, у которых абсолютное значение равно max среди всех абсолютных значений списка lst. Пример использования функции Task-8: (task-8 '(1 -5 8 -20 30 3 -50 4 50 50)) Результат выполнения: (-50 50 50)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5
Похожие ответы