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

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

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

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

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

textual
Листинг программы
(defun sum-min-max (w &optional f (a (car w)) (b (cadr w)))
  (cond ((null w) (+ a b))
        (f (sum-min-max (cdr w) nil a (max b (car w))))
        ((sum-min-max (cdr w) t (min a (car w)) b))))
 
 
> (sum-min-max '(1 2 3 -4 5 6 7))
7
> (sum-min-max '(1 2 3 4 -5 6 7))
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
Похожие ответы