문제

나는 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이됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top