Функция - Lisp (229325)
Формулировка задачи:
Понятия не имею как сделать
Построить функцию СУМА_ДОБУТОК (Х) через
РЕДУКЦИЯ (X, G, A), где Х - список чисел, G - бинарная
функция, а - постоянный параметр. Результат этой функции
список из 2-х чисел (произведение, сумма).
Решение задачи: «Функция»
textual
Листинг программы
(define (СУМА_ДОБУТОК x) (list (РЕДУКЦИЯ x * 1) (РЕДУКЦИЯ x + 0) )) (define (РЕДУКЦИЯ x g a) (if (null? x) a (РЕДУКЦИЯ (cdr x) g (g (car x) a)) )) (СУМА_ДОБУТОК '(2 3))
Объяснение кода листинга программы
В коде определены две функции:
- (СУМА_ДОБУТОК x) — функция, которая принимает один аргумент x.
- (РЕДУКЦИЯ x g a) — рекурсивная функция, которая принимает три аргумента: x, g и a. В функции (СУМА_ДОБУТОК x) происходит следующее:
- Создаётся список из двух элементов: (2 3).
- Функция (СУМА_ДОБУТОК x) вызывается с аргументом '(2 3). В функции (РЕДУКЦИЯ x g a) происходит следующее:
- Если x — null, то возвращается a.
- В противном случае вызывается (РЕДУКЦИЯ (cdr x) g (g (car x) a)). При выполнении (СУМА_ДОБУТОК '(2 3)) сначала вызывается (РЕДУКЦИЯ (cdr '(2 3)) g (g (car '(2 3)) a). В (РЕДУКЦИЯ (cdr '(2 3)) g (g (car '(2 3)) a) происходит следующее:
- (cdr '(2 3)) — это '(3).
- (g (car '(2 3)) a) — это (g 2 a).
- (РЕДУКЦИЯ '(3) g (g 2 a)) — если '(3) — null, то возвращается (g 2 a).
- (РЕДУКЦИЯ (cdr '(3)) g (g 2 a)) — (cdr '(3)) — это '(2).
- (g (car '(2)) a) — это (g 2 a).
- (РЕДУКЦИЯ '(2) g (g 2 a)) — если '(2) — null, то возвращается (g 2 a).
- (РЕДУКЦИЯ (cdr '(2)) g (g 2 a)) — (cdr '(2)) — это '().
- (g 2 a) — возвращается значение (g 2 a). Таким образом, результат выполнения (СУМА_ДОБУТОК '(2 3)) равен (g 2 (g 2 a)).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д