Code Review

Compare your solutions

    
(define (product term a next b)
  (define (iter a result)
    (if (> a b)
        result
        (iter (next a) (* (term a) result))))
  (iter a 1))

; (define (product term a next b)
;    (if (> a b)
;      1
;      (* (term a)
;         (product term (next a) next b))))

(define (factorial x) (product identity 1 inc x))


; π     2·4·4·6·6·8···
; -  =  --------------
; 4     3·3·5·5·7·7···
;
; Представим эту функцию в виде произведений:
;
; π     2 4 4 6 6 8 ···
; -  =  -·-·-·-·-·-·---
; 4     3 3 5 5 7 7 ···
;
; Попробуем понять логику изменений для каждой итерации:
;
; π     2 2+2 4+0 4+2 6+0 8 ···
; -  =  -·---·---·---·---·-·---
; 4     3 3+0 3+2 5+0 5+2 7 ···
;
; Значит мы начинаем с 2/3 и каждый чётный шаг добавляем к числителю
; 2 и к знаменателю 0. Каждый нечётный шаг делаем наоборот.