문제
나는 SICP를 혼자서 일하고 있으므로 이것에 대해 물어볼 강사가 없습니다. 이 코드는 PI를 근사해야하지만 항상 0을 반환합니다.
(define (approx-pi acc)
(define (factors a)
(define basic-num
(if (= (mod a 2) 0)
(/ a 2)
(/ (- a 1) 2)))
(if (= (mod basic-num 2) 0)
basic-num
(/ 1 basic-num)))
(* 4 (product factors 5 (* 2 acc))))
이 코드에서 참조되는 모드 및 제품 절차는 다음과 같습니다. 이것들은 문제가되지 않는 것 같지만 만일을 대비하여 포함하겠습니다.
(define (product func lo hi)
(define (product-iter i result)
(if (> i hi)
result
(product-iter (+ 1 i) (* result (func i)))))
(product-iter 1 1))
(define (mod a b)
(if (< (- a b) 0)
a
(mod (- a b) b)))
모든 것은 공식의 구현입니다.
pi / 4 = (2 * 4 * 4 * 6 ...) / (3 * 3 * 5 * 5 ...)
내 실수는 분명히 꽤 어리석은 일이지만, 나는 계획을 처음 접했기 때문에 그것을 찾을 수 없습니다. 누구에게도 문체 팁이 있다면 정말 감사합니다. 감사!
해결책
제품 기능에는 미묘한 결함이 있습니다.
(product + 4 5)
정답이 20 일 때 120을 반환합니다. 그 이유는
(product-iter 1 1) should be (product-iter lo 1)
다른 팁
전화에서 product-iter
기능에서 product
, 그것은 할 것입니다(* 1 (factor 1))
첫 번째 반복에서 바로 0으로 평가됩니다. (factor 1)
따라서 총 제품도 0이됩니다.
제휴하지 않습니다 StackOverflow