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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top