Frage

Ich arbeite durch SICP auf meiner eigenen, so habe ich nicht einen Lehrer darüber zu fragen. Dieser Code sollte pi annähert, aber immer wieder Null statt.

(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))))

Hier sind die Mod und Produktverfahren, die in diesem Code referenziert werden. Diese scheinen nicht das Problem zu sein, aber ich werde umfasst sie nur für den Fall.

(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)))

Die ganze Sache ist eine Implementierung der Formel:

pi / 4 = (2 * 4 * 4 * 6 ...) / (3 * 3 * 5 * 5 ...)

Mein Fehler ist offensichtlich etwas ziemlich dumm, aber ich bin neu in Schema so dass ich nicht finden kann. Wenn jemand irgendwelche stilistische Tipps hat, würde ich wirklich schätzen das auch. Dank!

War es hilfreich?

Lösung

Ihre Produktfunktion hat einen subtilen Fehler:

(product + 4 5)

liefert 120, wenn die richtige Antwort 20 ist. Der Grund ist,

(product-iter 1 1) should be (product-iter lo 1)

Andere Tipps

In dem Aufruf der Funktion product-iter product, wird es tun (* 1 (factor 1)) rechts in der ersten Iteration, die auf 0 wird bewerten, weil (factor 1) 0. Daher ist, wird das gesamte Produkt 0 als gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top