Question

Je travaille par SICP moi-même, donc je ne dispose pas d'un instructeur de poser des questions sur ce sujet. Ce code est censé rapprocher pi, mais revient toujours au lieu de zéro.

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

Voici les procédures de mod et de produits référencés dans ce code. Ceux-ci ne semblent pas être le problème, mais je vais les inclure au cas où.

(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'ensemble est une implémentation de la formule:

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

Mon erreur est évidemment quelque chose d'assez stupide, mais je suis nouveau schéma, donc je ne peux pas le trouver. Si quelqu'un a des conseils stylistiques, je voudrais vraiment comprendre que, aussi. Merci!

Était-ce utile?

La solution

Votre fonction produit a un défaut subtil:

(product + 4 5)

retourne 120 lorsque la réponse est 20. La raison en est

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

Autres conseils

Dans l'appel à product-iter dans la fonction product, il fera droit (* 1 (factor 1)) dans la première itération, qui sont évalués à 0, car (factor 1) est 0. Par conséquent, le produit total sera de 0 aussi bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top