SICP 1.31: Approximating Pi
Domanda
sto lavorando attraverso SICP per conto mio, in modo da non avere un istruttore per chiedere informazioni su questo. Questo codice dovrebbe approssimare pi greco, ma restituisce sempre zero invece.
(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))))
Qui ci sono le procedure di mod e di prodotto cui si fa riferimento in questo codice. Questi non sembrano essere il problema, ma io li comprendono per ogni evenienza.
(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)))
L'intera cosa è un'implementazione della formula:
pi / 4 = (2 * 4 * 4 * 6 ...) / (3 * 3 * 5 * 5 ...)
Il mio errore è ovviamente qualcosa di abbastanza stupido, ma io sono nuovo a Scheme, quindi non riesco a trovarlo. Se qualcuno ha qualche consiglio stilistici, mi piacerebbe davvero apprezzare il fatto che, anche. Grazie!
Soluzione
La vostra funzione prodotto ha un sottile difetto:
(product + 4 5)
restituisce 120 quando la risposta corretta è 20. Il motivo è
(product-iter 1 1) should be (product-iter lo 1)
Altri suggerimenti
Nella chiamata al product-iter
nella funzione product
, lo farà
destra (* 1 (factor 1))
nella prima iterazione, che restituirà 0 poiché (factor 1)
è 0. Pertanto, il prodotto totale sarà 0 pure.