我自己在SICP工作,所以我没有教练问这个问题。该代码应该近似于pi,但总是返回零。
(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))))
以下是此代码中引用的mod和产品过程。这些似乎不是问题,但我会包括它们以防万一。
(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 ...)
我的错误显然是非常愚蠢的,但我是Scheme的新手,所以我找不到它。 如果有人有任何风格提示,我也非常感激。谢谢!
答案 0 :(得分:3)
您的产品功能有一个微妙的缺陷:
(product + 4 5)
当正确答案为20时,返回120。 原因是
(product-iter 1 1) should be (product-iter lo 1)
答案 1 :(得分:0)
在函数product-iter
的{{1}}调用中,它会执行
product
在第一次迭代中正确,因为(* 1 (factor 1))
为0,因此评估为0.因此,总产品也将为0.