لحساب مضروب عدد في Prolog يجب أن يكون العدد صحيحًا غير سالب، وتكون قيمة 0! مساوية 1. نستخدم مُراكمًا للضرب مع تقليل العدد حتى الصفر، ونرفض الكسور بدل الدخول في تكرار لا يصل إلى حالة التوقف.
الكود الكامل في SWI-Prolog
:- module(gc_26560, [factorial/2]).
:- use_module(library(error)).
factorial(N, Factorial) :-
must_be(integer, N), N >= 0,
factorial_acc(N, 1, Factorial).
factorial_acc(0, Acc, Acc) :- !.
factorial_acc(N, Acc, Factorial) :-
N > 0, Next is N - 1, Product is Acc * N,
factorial_acc(Next, Product, Factorial).استعلام للتجربة
?- factorial(5, F).النتيجة F = 120، وfactorial(0,F) يعطي F = 1.
الصيغة والتوقف
تعني 5! حاصل ضرب 5 و4 و3 و2 و1، فتكون النتيجة 120. يبدأ المُراكم بقيمة 1 حتى يغطي الصفر أيضًا. نحدّثه قبل الاستدعاء التالي بدل انتظار الرجوع لحساب كل حاصل ضرب.
القيم الكبيرة واتجاه العلاقة
يدعم SWI-Prolog أعدادًا صحيحة كبيرة، لكن وقت الحساب وحجم الناتج ينموان؛ اختبر أحجامًا مناسبة لمشروعك. العلاقة هنا لحساب الناتج من N، وليست لحل N من مضروب معلوم. العدد السالب يفشل، والعدد غير الصحيح يسبب خطأ نوع واضحًا.
احفظ التعريفات في ملف بامتداد .pl ثم حمّله في SWI-Prolog. يُكتب الاستعلام عند المحث بعد تحميل الملف، ولا تنسخ الرمز ?- داخل ملف التعريفات. يتضمن الكود اسم module خاصًا بالدرس لتجنب تعارض الأسماء عند تحميل أمثلة متعددة.
الصور والفيديو من الشرح السابق
الكود النصي أعلاه هو النسخة المصححة؛ قد تختلف المواد المرئية السابقة في أسماء المتغيرات أو طريقة التشغيل.







