我正在通过自己的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))))
Run Code Online (Sandbox Code Playgroud)
以下是此代码中引用的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)))
Run Code Online (Sandbox Code Playgroud)
整个事情是公式的实现:
pi/4 =(2*4*4*6 ...)/(3*3*5*5 ......)
我的错误显然是非常愚蠢的,但我是Scheme的新手,所以我找不到它.如果有人有任何风格提示,我也非常感激.谢谢!
你的产品功能有一个微妙的缺陷:
(product + 4 5)
Run Code Online (Sandbox Code Playgroud)
当正确答案是 20 时,返回 120。原因是
(product-iter 1 1) should be (product-iter lo 1)
Run Code Online (Sandbox Code Playgroud)