سؤال

أنا أعمل من خلال SICP بمفردي، لذلك ليس لدي مدرب أن أسأل عنه. من المفترض أن يكون هذا الرمز تقريبي PI لكنه يرجع دائما صفر بدلا من ذلك.

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

فيما يلي إجراءات وزارة الدفاع والمنتج المشار إليها في هذا الرمز. لا يبدو أن هذه هي المشكلة ولكني ستشملها فقط في حالة.

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

إرجاع 120 عندما تكون الإجابة الصحيحة 20. السبب هو

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

نصائح أخرى

في الدعوة إلى product-iter في الوظيفة product, ، سوف تعمل(* 1 (factor 1)) الحق في التكرار الأول، الذي سيقيم إلى 0 ل (factor 1) هو 0. لذلك، سيكون المنتج الإجمالي 0 كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top