الاختبار الديناميكي للقوالب السفلية كما هو موضح في تابل

cs.stackexchange https://cs.stackexchange.com/questions/118970

سؤال

في الصفحة 195 من كتاب بيرس تابل ، يقول أنه يمكن للمرء أن يحل محل عامل التشغيل السفلي بنوع من اختبار النوع الديناميكي.ثم يعطي القواعد التالية:

تي تابيتيست:

Gamma\دفراك \ \ غاما \ فداش تي_1: ق \;\;\ غاما ، س: تي \ فداش تي_2: يو \;\;\ غاما \ فداش تي_3: ش} {\غاما \ فداش \ نص{إذا } تي_1 \ نص{ في } تي \ نص{ ثم } س \ إلى تي_2 \ نص{ آخر } تي_3 \ إلى تي_3:يو}}

النوع الإلكترونيالاختبار 1:

v\دفراك {\فداش ت_1:ر} {\نص{إذا } ت_1 \ نص{ في } ر \ نص{ ثم} س \ إلى ت_2 \ نص{ آخر } ت_3 \ إلى [س \ خرائطإلى ت_1] ت_2}}

النوع الإلكترونيالاختبار 2:

v\دفراك {\نفداش ت_1:ر} {\نص{إذا } ت_1 \ نص{ في } ر \ نص{ ثم } س \ إلى ت_2 \ نص{ آخر } ت_3 \ إلى ت_3}}

لا يوجد تفسير آخر وأنا غير مدرك لكيفية تفسير هذه القواعد.مراجعتها ، وأنا أدرك أن الأول هو قاعدة الكتابة والثاني والثالث هي قواعد التقييم.ومع ذلك ، فإن بناء الجملة غريب بعض الشيء.ما هي الأسهم في كل فرع من فروع إذا?لماذا إذا يتضمن inبناء الجملة?

هل كانت مفيدة؟

المحلول

القاعدة الأولى تي تيبيتيست هي قاعدة التحقق من النوع.دعونا نقرأها معا.أولا, $\غاما$ ليس مهما (في القراءة الأولى على الأقل).لدينا المباني التالية:

  1. t تي_11 لديه نوع $S$
  2. إذا $x$ لديه نوع $T$ ثم T تي_2$ لديه نوع $U$
  3. t تي_33 لديه نوع $U$

الاستنتاجات هي, أن نحصل على تعبير عن نوع $U$ (أعتقد أن النسخ الخاص بك يجب أن يكون "$:U$"بدلا من to \ إلى تي_33 الاستنتاج):math\ماثرم{إذا}\;تي_1 \ ؛ \ ماثرم{في}\;ر \ ؛ \ ماثرم{ثم}\;س \ إلى ر_2 \ ؛ \ ماثرم {آخر}\;تي_3 \ علامة{1} $ $ يمكن إلغاء معنى هذا التعبير من خلال النظر إلى القاعدتين الأخريين ، وهما دلالات تشغيلية صغيرة الخطوة.هنا هو تفسير غير صحيح ، ونحن سوف تجعل الصحيح في لحظة:

  1. إذا t تي_11 لديه نوع $T$ ثم (1) يقيم إلى t تي_2$ مع $x$ حلت محلها t تي_11.هذه هي حالة" مسبل " ، أي., t تي_11 هو مسبل من $S$ إلى $T$, ، لا بد من قيمة مسبل ل $x$ ثم t تي_2$ يتم تنفيذها.

  2. إذا t تي_2$ ليس لديه نوع $T$ ثم (1) يقيم إلى t تي_33.هذا هو "الافتراضي" الذي نستخدمه عندما يكون المسبل غير ممكن.

التفسير أعلاه غير صحيح لأننا يجب أن نستخدم v ت_11 بدلا من t تي_11, ، الذي يقول لك المؤلف:أولا تقييم t تي_11 إلى v ت_11, ، ومن ثم تنفيذ مسبل.

في لغة و وهمي نفس الشيء قد تكون مكتوبة إلى حد ما مثل هذا:

S t1 = ...;
...
if (t1 instanceof T) {
  T x = (T)t1;
  t2;
} else {
  t3;
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top