دالة المضروب

📄 الأصل: function-declaration-factorial.na

📦 تحميل الملف: ⬇ تحميل

🔗 عرض الملف:

	
		--- SPDX-License-Identifier: Apache-2.0
--- Copyright © The Naftah Project Authors

---*
هذا القسم يحتوي على تعريفات متعددة لدالة "المضروب" (العامل)، باستخدام العودية (التعريف الذاتي)، بلغة برمجة نفطه.
تشمل هذه التعريفات ما يلي:

١. دالة عودية لحساب المضروب:
   - تُستخدم العودية لتكرار العملية الحسابية.
   - تحتوي على شرط وقف لمنع الاستدعاءات اللانهائية.
   - تُرجع 1 عندما يكون العدد ≤ 1، وتستدعي نفسها مع العدد - 1 في الحالة الأخرى.

٢. استدعاءات لاختبار الدالة:
   - استدعاء مع القيمة 1 للتحقق من صحة التنفيذ.
   - استدعاء بدون معامل، والذي قد يؤدي إلى خطأ إن لم تكن هناك قيمة افتراضية معرفة (تُستخدم القيمة 10 كافتراضية في هذا السياق).

٣. دالة مضروب محسنة:
   - تحتوي على دالة داخلية (محلية) تطبع الرقم قبل كل استدعاء.
   - تُستخدم لأغراض التتبع أو الفهم البصري لتسلسل الاستدعاءات العودية.
   - تعزز مبدأ "التجريد" عبر فصل مسؤولية الطباعة عن الحساب.

الهدف من هذا المثال هو:
- توضيح كيفية بناء دوال عودية باستخدام بناء جملة عربي مبسط.
- إبراز مفاهيم مثل القيم الافتراضية، الدوال الداخلية، والشرط العودي.
*---

---* دالة لحساب المضروب (العامل) لعدد معين باستخدام العودية *---
دالة دالة_المضروب(عدد_مضروب تعيين 10) : عدد_طويل {
    --- إذا كان العدد أقل من أو يساوي 1، أرجع 1 (شرط الوقف)
    إذا عدد_مضروب أصغر_أو_يساوي ١ إذن {
        ارجع 1
    }
    أنهي

    --- استدعاء ذاتي لحساب المضروب
    ارجع عدد_مضروب ضارب دالة_المضروب(عدد_مضروب ناقص 1)
}

--- اختبار الدالة باستدعائها مع 1
دالة_المضروب(1)

--- استدعاء بدون معامل (قد يؤدي إلى خطأ إذا لم يكن هناك قيمة افتراضية)
دالة_المضروب()

---* دالة مضروب تحتوي على دالة داخلية لطباعة القيمة في كل استدعاء *---
دالة دالة_المضروب(عدد_مضروب تعيين 10) : عدد_طويل {

    --- تعريف دالة داخلية لطباعة الرقم
    دالة دالة_المضروب_إطبع(عدد_مضروب) : عدم {
        إطبع(عدد_مضروب)
    }

    --- استدعاء دالة الطباعة قبل الحساب
    دالة_المضروب_إطبع(عدد_مضروب)

    --- شرط الوقف: إذا العدد <= 1، أرجع 1
    إذا عدد_مضروب أصغر_أو_يساوي ١ إذن {
        ارجع 1
    }
    أنهي

    --- حساب المضروب بشكل عودي
    ارجع عدد_مضروب ضارب دالة_المضروب(عدد_مضروب ناقص 1)
}