Упростить часть кода в сумме двух списков - Lisp

Узнай цену своей работы

Формулировка задачи:

Дан список (a1, a2,…, aN). Вычислить значение выражения- max(a2,a4,…)+min(a1,a3,…). Рабочий код:
Листинг программы
  1. (defun x (list index f element)
  2. (cond
  3. ((>= index (length list)) element)
  4. ((funcall f (nth index list) element) (x list (+ index 2) f (nth index list)))
  5. (t (x list (+ index 2) f element))
  6. )
  7. )
  8. (defun z5()
  9. (setq list `(11 2 13 4 6))
  10. (+ (x list 0 (lambda (p n) (< p n)) (car list))
  11. (x list 1 (lambda (p n) (> p n)) (car (cdr list)))
  12. )
  13. )
Нужно упростить функцию х(заменить nth), НО чтобы осталась функция z5 и вызов funcall

Решение задачи: «Упростить часть кода в сумме двух списков»

textual
Листинг программы
  1. (defun sum-min-max (w &optional f (a (car w)) (b (cadr w)))
  2.   (cond ((null w) (+ a b))
  3.         (f (sum-min-max (cdr w) nil a (max b (car w))))
  4.         ((sum-min-max (cdr w) t (min a (car w)) b))))
  5.  
  6.  
  7. > (sum-min-max '(1 2 3 -4 5 6 7))
  8. 7
  9. > (sum-min-max '(1 2 3 4 -5 6 7))
  10. 1

Объяснение кода листинга программы

В коде определён встроенный функтор sum-min-max. Данный код решает задачу поиска суммы минимального и максимального элементов в списке. Вот список не более 20 элементов, оформленный в виде описания кода:

  1. Объявление встроенного функтора sum-min-max с двумя обязательными аргументами w и f.
  2. Если w равно null, то возвращается сумма a и b.
  3. Если f равно true, то возвращается результат вызова функции sum-min-max для w, в котором происходит рекурсивный вызов для вычисления минимального и максимального значения.
  4. Если f равно false, то возвращается результат вызова функции sum-min-max для w, в котором происходит рекурсивный вызов для вычисления минимального значения. Пример использования функции:

    (sum-min-max '(1 2 3 -4 5 6 7)) 7 В этом примере функция sum-min-max принимает список (1 2 3 -4 5 6 7) и возвращает 7, так как сумма минимального и максимального значения равна 7.

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


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

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

11   голосов , оценка 4.091 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы