Функция - 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))

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

В коде определены две функции:

  1. (СУМА_ДОБУТОК x) — функция, которая принимает один аргумент x.
  2. (РЕДУКЦИЯ x g a) — рекурсивная функция, которая принимает три аргумента: x, g и a. В функции (СУМА_ДОБУТОК x) происходит следующее:
  3. Создаётся список из двух элементов: (2 3).
  4. Функция (СУМА_ДОБУТОК x) вызывается с аргументом '(2 3). В функции (РЕДУКЦИЯ x g a) происходит следующее:
  5. Если x — null, то возвращается a.
  6. В противном случае вызывается (РЕДУКЦИЯ (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) происходит следующее:
  7. (cdr '(2 3)) — это '(3).
  8. (g (car '(2 3)) a) — это (g 2 a).
  9. (РЕДУКЦИЯ '(3) g (g 2 a)) — если '(3) — null, то возвращается (g 2 a).
  10. (РЕДУКЦИЯ (cdr '(3)) g (g 2 a)) — (cdr '(3)) — это '(2).
  11. (g (car '(2)) a) — это (g 2 a).
  12. (РЕДУКЦИЯ '(2) g (g 2 a)) — если '(2) — null, то возвращается (g 2 a).
  13. (РЕДУКЦИЯ (cdr '(2)) g (g 2 a)) — (cdr '(2)) — это '().
  14. (g 2 a) — возвращается значение (g 2 a). Таким образом, результат выполнения (СУМА_ДОБУТОК '(2 3)) равен (g 2 (g 2 a)).

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


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

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

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