المسارات
/
Factor
Factor
/
التمارين
/
لازانيا ليا الشهية
لازانيا ليا الشهية

لازانيا ليا الشهية

تمرين تعلّمي

مقدمة

في Cargo Shuffle تعرّفت على مكدس البيانات في Factor وعلى كلمات إعادة الترتيب التي تعيد ترتيبه. يبني هذا التمرين على ذلك: ستُعرِّف كلمات تحسب انطلاقًا من مدخلاتها بدلًا من مجرد تحريكها.

التعليقات

تبدأ ! تعليقًا سطريًا، ويتجاهل Factor كل ما يأتي بعدها حتى نهاية السطر. تستخدم الأمثلة أدناه ! لشرح ما يفعله الكود ولبيان ما سيطبعه.

الكلمات

الكلمة هي تسمية Factor للدالة. استدعاء كلمة يسحب بعض القيم من أعلى المكدس ويدفع قيمًا أخرى مكانها. تسحب . القيمة العليا وتطبعها؛ أما كلمات الحساب على الأعداد الصحيحة + و- و* فتسحب عددين وتدفع الناتج:

2 3 + .    ! prints 5
8 3 - .    ! prints 5    (8 - 3, not 3 - 8)
2 3 * .    ! prints 6

وثمة كلمة قريبة منها هي .s، تطبع كامل مكدس البيانات دون أن تستهلك أي قيمة. وهذا مفيد في المستمع (وهو الموجّه التفاعلي في Factor، حيث تكتب الكود وترى النتائج) لمعرفة ما تتركه قطعة الكود خلفها. ولهذا تنتهي بعض الأمثلة لاحقًا بـ .s بدلًا من .: فهي تترك أكثر من قيمة على المكدس، و.s تعرضها كلها.

توجد كلمات الحساب في مفردات math، لذا يحتاج أي ملف يستخدمها إلى math في سطر USING: الخاص به.

تأثيرات المكدس

كل كلمة تُوثَّق بـ تأثير المكدس الخاص بها على الصيغة ( inputs -- outputs ). وهو عقد الكلمة: فهي تسحب المدخلات من أعلى المكدس وتترك المخرجات مكانها. أما الأسماء داخله فهي موجودة فقط لمساعدتك على قراءته، ولا يستخدمها Factor، فهو يتتبّع فقط ترتيب القيم على المكدس.

! + is specified as ( x y -- sum )
! . is specified as ( x   --     )

أعلى المكدس هو المدخل الأيمن. لذا في 8 3 - تكون 3 في الأعلى، وتأثير المكدس هو ( x y -- difference )، والناتج هو 8 - 3.

وعلامة الاستفهام ? في نهاية المخرجات هي الاصطلاح الدال على «قيمة منطقية»، لكن تمرين اللازانيا يستخدم الأعداد فقط.

وستظهر أدناه واحدة من كلمات إعادة الترتيب من Cargo Shuffle: swap وهي ( x y -- y x )، وتقلب القيمتين العلويتين عندما يكون ترتيبهما خاطئًا للكلمة التالية.

تعريف كلمة

تبدأ : تعريف الكلمة، ثم يأتي تأثير المكدس، ثم الجسم، ويُختم التعريف بـ ;.

: square ( x -- x^2 ) dup * ;

4 square .    ! => 16

ويتحقق مصرّف Factor من أن الجسم يطابق فعلًا تأثير المكدس المعلَن: فأي كلمة تدّعي ( x -- y ) لكنها تترك صفرًا أو قيمتين على المكدس فلن تُصرَّف.

الثوابت

تعرّف CONSTANT: اسمًا لقيمة ثابتة. والثابت نفسه كلمة: فاستدعاؤه يدفع القيمة إلى المكدس:

CONSTANT: pi 3

pi pi * .    ! => 9

CONSTANT: جزء من الصياغة الأساسية ولا يحتاج إلى سطر USING:. ضع الثوابت في أعلى الملف، قبل أي كلمة تستخدمها.

استدعاء كلمة من كلمة أخرى

يمكن لجسم الكلمة أن يستدعي أي كلمة موجودة في النطاق، بما فيها كلمات عرّفتها سابقًا في الملف نفسه:

: double    ( x -- 2x ) 2 * ;
: quadruple ( x -- 4x ) double double ;

5 quadruple .    ! => 20

وبهذه الطريقة تعيد المهمة الأخيرة في التمرين استخدام مهمة سابقة.

اصطلاحات التسمية

تستخدم الكلمات والثوابت معًا نمط lowercase-kebab-case: حروف صغيرة تصل بينها شُرَط (على سبيل المثال، expected-bake-time وpreparation-time).

التعليمات

في هذا التمرين ستكتب بعض الكود لمساعدتك على طهي لازانيا رائعة من كتاب الطبخ المفضّل لديك.

لديك أربع مهام، وكلها تتعلق بالوقت المستغرق في طهي اللازانيا.

1. خزّن زمن الخبز المتوقع في ثابت

عرّف الثابت expected-bake-time، الذي ينبغي أن يُرجع عدد الدقائق التي تحتاجها اللازانيا لتُخبز في الفرن.

وفقًا لكتاب الطبخ، تحتاج اللازانيا إلى البقاء في الفرن مدة إجمالية قدرها 40 دقيقة.

expected-bake-time .
! => 40

2. احسب زمن التحضير بالدقائق

عرّف الكلمة preparation-time. تأخذ عدد الطبقات التي أضفتها إلى اللازانيا من المكدّس، وتترك عدد الدقائق التي استغرقتها في تحضيرها، بافتراض أن تحضير كل طبقة يستغرق دقيقتين.

4 preparation-time .
! => 8

3. احسب الزمن المتبقي في الفرن بالدقائق

عرّف الكلمة remaining-time. تأخذ عدد الدقائق التي قضتها اللازانيا بالفعل في الفرن، وتترك عدد الدقائق التي ما زال عليها أن تبقى فيها.

25 remaining-time .
! => 15

4. احسب زمن العمل الإجمالي بالدقائق

عرّف الكلمة total-working-time. تأخذ وسيطين من المكدّس (أولًا عدد طبقات اللازانيا، ثم عدد الدقائق التي قضتها اللازانيا بالفعل في الفرن)، وتترك الزمن الإجمالي المستغرق في الطهي حتى الآن: زمن التحضير زائد الزمن الذي قضيته في الفرن بالفعل.

3 20 total-working-time .
! => 26
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
Factor Exercism

مستعد لبدء لازانيا ليا الشهية؟

سجّل في Exercism لتتعلّم وتتقن Factor عبر 47 مفهومًا163 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.