Упростить часть кода в сумме двух списков - Lisp
Формулировка задачи:
Дан список (a1, a2,…, aN). Вычислить значение выражения-
max(a2,a4,…)+min(a1,a3,…).
Рабочий код:
Нужно упростить функцию х(заменить nth), НО чтобы осталась функция z5 и вызов funcall
(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))) ) )
Решение задачи: «Упростить часть кода в сумме двух списков»
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 элементов, оформленный в виде описания кода:
- Объявление встроенного функтора sum-min-max с двумя обязательными аргументами w и f.
- Если w равно null, то возвращается сумма a и b.
- Если f равно true, то возвращается результат вызова функции sum-min-max для w, в котором происходит рекурсивный вызов для вычисления минимального и максимального значения.
- Если 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д