المسارات
/
F#
F#
/
التمارين
/
تسعير البيتزا
تسعير البيتزا

تسعير البيتزا

تمرين تعلّمي

مقدمة

العودية

القدرة على تعريف شيء ما من خلال نفسه تُسمى العودية. في F#، تظهر العودية غالبًا في الدوال العودية، وهي دوال تستدعي نفسها.

تحتاج الدالة العودية إلى حالة أساسية واحدة على الأقل وإلى حالة عودية واحدة على الأقل. تُرجع حالة أساسية قيمة دون استدعاء الدالة مرة أخرى. تستدعي حالة عودية الدالة مرة أخرى، مع تعديل المدخل بحيث يطابق الحالة الأساسية في مرحلة ما.

تُعرَّف الدوال العودية مثل الدوال العادية، ولكن باستخدام المعدِّل rec. بدون هذا المعدِّل، لن تتمكن الدالة من استدعاء نفسها، وأي محاولة لفعل ذلك ستؤدي إلى خطأ في الترجمة. لذلك يجب اختيار العودية صراحةً.

let rec factorial x =
    // Base case
    if x = 1 then
        1
    // Recursive case
    else
        x * factorial (x - 1)

يدعم F# أيضًا الأنواع العودية من خلال أنواع الاتحاد المميز. النوع العودي من نوع الاتحاد المميز تكون فيه حالة واحدة أو أكثر من حالاته تشير إلى نوع الاتحاد المميز نفسه في بياناتها. مثل الدوال العودية، يجب أن يكون للأنواع العودية حالة أساسية. وعلى عكس الدوال العودية، لا تستخدم الأنواع العودية الكلمة المفتاحية rec.

type RussianDoll =
    | Doll                 // Base case
    | Layer of RussianDoll // Recursive case

التعليمات

في هذا التمرين، تعمل في مطعم بيتزا يوصل الطلبات إلى العملاء.

أنت تقدّم ثلاثة أنواع من البيتزا:

  • Margherita: $7
  • Caprese: $9
  • Formaggio: $10

ويمكن للعملاء أيضًا اختيار خيارين إضافيين مقابل رسم إضافي بسيط:

  1. صلصة إضافية: $1
  2. مكوّنات إضافية: $2

عندما يقدّم العملاء طلبًا، تُضاف رسوم إضافية إذا طلبوا بيتزا واحدة أو بيتزتين فقط:

  • بيتزا واحدة: $3
  • بيتزتان: $2

لديك ثلاث مهام، تتعامل كل واحدة منها مع البيتزا وسعرها.

1. عرّف أنواع البيتزا وخياراتها

عرّف الاتحاد المميّز Pizza لتمثيل أنواع البيتزا والخيارين الإضافيين اللذين يمكن إضافتهما إلى البيتزا:

  • Margherita
  • Caprese
  • Formaggio
  • ExtraSauce
  • ExtraToppings

2. احسب سعر البيتزا

نفّذ الدالة pizzaPrice لحساب سعر البيتزا:

pizzaPrice Caprese
// => 9

3. احسب سعر الطلب

نفّذ الدالة orderPrice لحساب سعر طلب البيتزا:

orderPrice [Margherita; Formaggio]
// => 19
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
F# Exercism

مستعد لبدء تسعير البيتزا؟

سجّل في Exercism لتتعلّم وتتقن F# عبر 18 مفهومًا148 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.