Решение выражения с Lisp
Формулировка задачи:
Решение задачи: «Решение выражения с Lisp»
;; Итерация: (defun f (a n) (iter (for i from 1 to n) (summing (/ (* i a) (+ a i))))) ==> f (f 3 10) ==> 715867/40040 (f 3.0 10) ==> 17.8787962037962 ;; Рекурсия (defun f (a n &optional (i 0) (s 0)) (if (= i n) s (let ((i1 (+ i 1))) (f a n i1 (+ s (/ (* i1 a) (+ a i1))))))) ==> f (f 3.0 10) ==> 17.8787962037962 (f 3 10) ==> 715867/40040
Объяснение кода листинга программы
В первом фрагменте кода определена функция f
, которая вычисляет значение выражения. Она принимает два аргумента: a
и n
. Внутри функции используется цикл iter
, который выполняет итерацию от 1 до n
. На каждой итерации выполняется операция суммирования, в которой результат вычисления выражения / (* i a) (+ a i)
добавляется к сумме. Результатом работы функции является значение выражения.
Во втором фрагменте кода определена функция f
, которая также вычисляет значение выражения, но уже с использованием рекурсии. Функция принимает три аргумента: a
, n
и два необязательных аргумента i
и s
. Аргумент i
по умолчанию равен 0, а аргумент s
по умолчанию равен 0. Если i
равно n
, то возвращается значение s
. В противном случае, внутри функции создается новая переменная i1
, которая равна + i 1
. Затем вызывается функция f
с аргументами a
, n
, i1
и s
с добавлением результата вычисления выражения / (* i1 a) (+ a i1)
. Результатом работы функции является значение выражения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д