Функция - Lisp (229325)

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

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

Понятия не имею как сделать Построить функцию СУМА_ДОБУТОК (Х) через РЕДУКЦИЯ (X, G, A), где Х - список чисел, G - бинарная функция, а - постоянный параметр. Результат этой функции список из 2-х чисел (произведение, сумма).

Решение задачи: «Функция»

textual
Листинг программы
  1. (define (СУМА_ДОБУТОК x)
  2.  (list
  3.   (РЕДУКЦИЯ x * 1)
  4.   (РЕДУКЦИЯ x + 0)
  5. ))
  6.  
  7. (define (РЕДУКЦИЯ x g a)
  8.  (if (null? x)
  9.   a
  10.   (РЕДУКЦИЯ (cdr x) g (g (car x) a))
  11. ))
  12.  
  13. (СУМА_ДОБУТОК '(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

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

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

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