شارك المقالة

تعتمد Prolog على حقائق وقواعد واستعلامات. نبدأ بعلاقة parent ثم نستنتج علاقة ancestor بالاستدعاء الذاتي. الهدف فهم كيف يبحث المحرك عن حلول، وليس حفظ وصف أن اللغة صعبة أو أنها وحدها تصنع روبوتًا ذكيًا.

الكود الكامل في SWI-Prolog

:- module(gc_26604, [parent/2, ancestor/2]).

parent(ahmed, sara).
parent(sara, omar).

ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).

استعلام للتجربة

?- ancestor(ahmed, Who).

الحلان Who = sara ثم Who = omar. حمّل الملف أولًا، ثم اكتب الاستعلام عند المحث.

الحقائق والمتغيرات

تبدأ أسماء العلاقات والذرات المعتادة بحرف صغير، وتبدأ المتغيرات بحرف كبير أو بشرطة سفلية. تنتهي كل حقيقة أو قاعدة بنقطة. parent(ahmed,sara) حقيقة، وancestor قاعدة تستند إلى parent. ليست Prolog سلسلة أوامر تنفذ مثل برنامج حسابي تقليدي فقط.

كيف تستكشف النتائج؟

يستنتج الاستعلام أن sara وomar من ذرية ahmed وفق بياناتنا. اطلب حلًا إضافيًا بالفاصلة المنقوطة عند المحث. تبقى علاقة parent اتجاهية؛ parent(omar,sara) لا تصبح صحيحة تلقائيًا. تجنب الدورات في بيانات هذا المثال، لأنها قد تجعل الاستدعاء الذاتي البسيط لا ينتهي دون تقنيات إضافية مثل tabling.

احفظ التعريفات في ملف بامتداد .pl ثم حمّله في SWI-Prolog. يُكتب الاستعلام عند المحث بعد تحميل الملف، ولا تنسخ الرمز ?- داخل ملف التعريفات. يتضمن الكود اسم module خاصًا بالدرس لتجنب تعارض الأسماء عند تحميل أمثلة متعددة.

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع