質問
私は自分自身でSICPて働いているので、私はこれについて尋ねるためにインストラクターを持っていません。このコードは、パイを近似することになったが代わりに常にゼロを返しますされます。
(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 ...)
私のミスは明らかにかなり愚かなものですが、私はそれを見つけることができないので、私は、スキームに新たなんです。 誰もが任意の文体のヒントを持っている場合は、私はあまりにも、それを本当に感謝します。ありがとう!
解決
あなたの製品機能は、微妙な欠陥があります:
(product + 4 5)
正解が20である場合に120を返します。 その理由は、
(product-iter 1 1) should be (product-iter lo 1)
他のヒント
関数product-iter
にproduct
への呼び出しでは、それが行います
(* 1 (factor 1))
。したがって0であるため、0と評価される最初の反復における(factor 1)
権利は、全生成物は、同様に0になります。
所属していません StackOverflow