ما هو تفسير ممارسة 1.6 في SICP?
سؤال
أنا مجرد بداية للعمل من خلال SICP (على بلدي ، هذا ليس لفئة), و لقد كنت تناضل مع ممارسة 1.6 لبضعة أيام وأنا فقط لا يمكن أن يبدو لمعرفة ذلك.هذا هو واحد حيث أليسا إعادة تعريف if
حيث cond
, مثل:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause))
كانت الاختبارات بنجاح في بعض الحالات البسيطة ، ومن ثم يستخدم لإعادة كتابة الجذر التربيعي برنامج (التي عملت على ما يرام مع if
):
(define (sqrt-iter guess x)
(new-if (good-enough? guess x)
guess
(sqrt-iter (improve guess x)
x)))
السؤال ثم يسأل:"ماذا يحدث عندما أليسا محاولات لاستخدام هذا لحساب مربع جذور ؟ شرح." [إذا لزم الأمر, أنا سعيد أن إنتاج إجراءات أخرى (good-enough?
, improve
, ، الخ) ، فقط اسمحوا لي أن أعرف.]
الآن أنا أعرف ما يحدث:لم بإرجاع قيمة ، وهو ما يعني أن البرنامج recurses بلا حدود.أنا فقط لا يمكن أن يفسر لماذا يحدث هذا.مهما كانت خفية يوجد فرق بين if
و new-if
هو التملص مني.أي مساعدة محل تقدير كبير.
المحلول
new-if
هي وظيفة. عندما يتم استدعاء وظيفة، ما هو أول ما يفعله المخطط مع قائمة الوساطة؟ يقيم الكل الحجج.
نصائح أخرى
new-if
هو إجراء، ويستخدم المخطط تقييم الطلب المتقدبي (1.1.5)، لذلك حتى من قبل new-if
يتم تنفيذها بالفعل، عليها تقييم جميع الحجج أولا، والتي هي guess
و (sqrt-iter (improve guess x) x)
. وبعد يمكنك أن ترى أن الحجة الأخيرة هي العودية، والتي تستدعي جديد new-if
الإجراء، هذه هي الطريقة التي تحدث الحلقة اللانهائية.
العادي if
لا تحتاج إلى تقييم حججها أولا، فقط تذهب على طول الطريق، وهذا هو الفرق بين if
و new-if
. :)
بادئ ذي بدء فهم الفرق بين تقييم النظام الأمامي والنظام الطبيعي. يستخدم LISP طلبا متطورا، لكن التعبيرات الشرطية يتم تقييمها وليس مثل الوظائف العادية (SICP الفصل 1.1.6.):
(if <predicate> <consequent> <alternative>)
لتقييم التعبير IF، يبدأ مترجم الترجمة من خلال تقييم
<predicate>
جزء من التعبير. إذا كان<predicate>
يقيم إلى قيمة حقيقية، ثم يقوم المترجم الخاص بتقييم<consequent>
وإرجاع قيمتها. وإلا فإنه يقيم<alternative>
وإرجاع قيمتها.
Ex1.6.الجديدة-إذا كان:
(define (new-if predicate then-clause else-clause)
(cond (predicate then-clause)
(else else-clause)))
الفرق مع 'إذا-البيانات:إذا كشوف تقييم واحد من المسند -> يترتب على ذلك -> بديل ،
ولكن الجديد-إذا كان قد لتقييم جميع المعلمات الملقب الحجج لحظة ما يسمى(الذي يعني 'آخر-شرط' يقيم في البداية!!),
وبالتالي هذا يسبب حلقة لانهائية عند أي من هذه المعايير يسمون أنفسهم في حلقة تكرارية