logo

برامج البرولوج

إن استخدام المسندات المضمنة، أو تسلسل الأهداف، أو تحديد هدف في موجه النظام لن يكون ذا قيمة كبيرة في حد ذاته. لكتابة برنامج Prolog، أولاً، يجب على المستخدم كتابة برنامج مكتوب بلغة Prolog، وتحميل هذا البرنامج، ثم تحديد تسلسل لهدف واحد أو أكثر في الموجه.

لإنشاء برنامج في Prolog، الطريقة البسيطة هي كتابته في محرر النصوص ثم حفظه كملف نصي مثل prolog1.pl .

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

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

استخدام المسند المدمج ' شاور' ، يمكن تحميل البرنامج أعلاه في نظام Prolog.

?-استشارة('prolog1.pl').

يوضح هذا أن ملف prolog1.pl موجود، وأن برنامج prolog صحيح نظاميًا، مما يعني أنه يحتوي على عبارات صالحة، وسينجح الهدف، وللتأكد من قراءة البرنامج بشكل صحيح، فإنه ينتج سطرًا واحدًا أو أكثر من المخرجات. على سبيل المثال،

?-
# 0.00 ثانية للتشاور مع prolog1.pl
?-

مواقع مثل كوميت

بديل 'الاستشارة' هو 'تحميل'، والذي سيكون موجودًا في خيار القائمة إذا كان نظام Prolog يحتوي على واجهة مستخدم رسومية.

عند تحميل البرنامج، سيتم وضع الجملة في منطقة تخزين، وتعرف منطقة التخزين هذه بقاعدة بيانات Prolog. استجابةً لمطالبة النظام، حدد تسلسلًا للأهداف، وسيؤدي ذلك إلى قيام Prolog بالبحث عن البنود الضرورية واستخدامها لتقييم الأهداف.

المصطلح

وفي البرنامج التالي ثلاثة أسطر توضح الجمل.

 dog(rottweiler). cat(munchkin). animal(A) :- cat(A). 

باستخدام النقطة الكاملة، سيتم إنهاء كل جملة. تحتوي برامج Prolog على سلسلة من الجمل. يتم وصف الحقائق أو القواعد في هذه البنود.

مثال على حقائق يكون كلب (روت وايلر) و القط (مانشكين) . يقصدون ذلك' روتويللر هو كلب 'و' munchkin هو القط'.

ويسمى الكلب المسند. يحتوي الكلب على وسيطة واحدة. كلمة ' روت وايلر بين القوسين ( ). الروت وايلر يسمى ذرة.

مثال القاعدة هو السطر الأخير من البرنامج.

 animal(A) :- dog(A). 

ستتم قراءة حرف النقطتين (:-) كـ 'if'. هنا A متغير، ويمثل أي قيمة. وبطريقة طبيعية، يمكن قراءة القاعدة على النحو التالي: 'إذا كان 'أ' حيوانًا، فإن 'أ' كلب'.

والجملة السابقة تبين أن روتويللر هو حيوان. يمكن إجراء هذا الخصم أيضًا بواسطة Prolog:

?- حيوان(روتويللر).
نعم

لتعني ذلك munchkin فهو حيوان، ولا دليل على ذلك.

?- حيوان(منشكين).
لا

المزيد من المصطلحات

يحدد تقييم مصطلح الهدف ما إذا كان راضيًا أم لا. ويعني أيضًا أن تقييم الهدف يكون صحيحًا أو خطأ.

لاحظ أنه عندما يقوم المستخدم بإدخال هدف، فإنه في بعض الأحيان يمكن تفسيره على أنه أمر. على سبيل المثال،

؟- وقف. 'يتم استخدامه للخروج من نظام Prolog.'

في بعض الأحيان يمكن اعتباره سؤالًا مثل،

?- حيوان(روتويللر). & 'هل الروت وايلر حيوان؟'

يعرض البرنامج التالي مثالاً آخر عن الحيوانات. وهو يشتمل على ثمانية أحكام. يظهر التعليق من خلال النص الموجود بين /* و*/.

 /* Another Program of Animal */ Dog(rottweiler). cat(sphynx). dog(poodle). dog(bulldog). cat(bengal). dog(dobermann). cat(himalayan). cat(singapura). /* This Prolog program consists of various clauses. It is always terminated using the full stop.*/ 

يحتوي كل من الكلب المسند والقط المسند على أربعة بنود. لنفترض أنه في الملف النصي 'animal.pl'، تم حفظ البرنامج، ويتم إنشاء الإخراج عن طريق تحميل البرنامج وفي موجه النظام، نقوم بإدخال سلسلة من الأهداف على النحو التالي:

?- استشر('animals1.pl'). موجه النظام
# 0.01 ثانية لاستشارة Animals.pl تم تحميل Animals.pl باستخدام الاستشارة

?- كلب(روتويللر).
نعم

?- كلب(ملاكم).
لا

?- كلب(أ).
A = توقف الروت وايلر مؤقتًا - يتم الضغط على مفتاح العودة من قبل المستخدم

?- كلب(ب).
ب = روت وايلر. توقف؟ يضغط المستخدم ;
ب = القلطي. توقف؟ يضغط المستخدم ;
ب = بلدغ. توقف؟ يضغط المستخدم ;
ب = دوبيرمان لا توقف؟ وسوف يذهب إلى السطر التالي

?- قطة(أ). أ = أبو الهول؛ يوقف ؟ يضغط المستخدم؛
أ = توقف البنغال؟ يضغط المستخدم على العودة

?- الاستماع(كلب). وسوف يسرد جميع البنود التي تحدد الكلب المسند

/* كلب/1 */

كلب (روت وايلر).
كلب (كلب).
كلب (البلدغ).
كلب (دوبيرمان).
نعم
?-

في هذا المثال، تم تقديم العديد من الميزات الجديدة لـ Prolog. الاستعلام هو كما يلي:

?- كلب(أ).

وهذا يعني أن تجد قيمة A، وسوف يكون اسم الكلب. إجابة البرولوج هي كما يلي:

أ= روت وايلر

الإجابات المحتملة الأخرى لـ A هي كما يلي، القلطي، البلدغ، الدوبيرمان. سيؤدي ذلك إلى توقف Prolog مؤقتًا، ولهذا السبب، يتعين علينا الانتظار حتى يضغط المستخدم على مفتاح 'الرجوع' قبل أن يقوم بإخراج موجه النظام؟-.

يمكننا إدخال الاستعلام التالي على النحو التالي:

?- كلب(ب).

هذا الاستعلام هو نفسه كما كان من قبل. الاستعلام أعلاه يعني 'ابحث عن قيمة B، وسيكون اسم كلب'. إجابة البرولوج هي كما يلي:

ب = روت وايلر

قائمة مرتبطة في جافا

سوف يتوقف Prolog مرة أخرى. هذه المرة يتم الضغط على مفتاح الفاصلة المنقوطة (؛) من قبل المستخدم. الآن سوف يجد Prolog قيمة بديلة لـ B ترضي الكلب المستهدف (B). وسوف يتم الرد كالتالي:

ب = القلطي

سوف يتوقف Prolog مرة أخرى. يتم الضغط على مفتاح الفاصلة المنقوطة (؛) مرة أخرى من قبل المستخدم. ينتج Prolog حلاً إضافيًا على النحو التالي:

ب = البلدغ

سوف يتوقف Prolog مرة أخرى. يتم الضغط على مفتاح الفاصلة المنقوطة (؛) مرة أخرى من قبل المستخدم. ينتج Prolog حلاً إضافيًا على النحو التالي:

ب = دوبيرمان

يتعرف Prolog على أنه لم يعد هناك حل متاح من خلال عدم الإيقاف المؤقت، ولكن يطالب النظام - بالانتقال فورًا إلى الإخراج.

يتم تقديم مسند مدمج جديد في هذا المثال. تحديد الهدف

?- قائمة(كلب)

في الهدف أعلاه، سوف يقوم Prolog بإدراج جميع البنود الأربعة التي تحدد الكلب المسند. سيتم تعريفهم بنفس الترتيب الذي تم تحميلهم به في قاعدة البيانات.

يتم توضيح استخدام المتغيرات في الاستعلام من خلال المثال التالي. تسلسل الهدف هو كما يلي:

عدد صحيح للسلسلة في Java

?-قطة(أ)،كلب(ب).

سيعطينا هذا كل المجموعات الممكنة من قطة وكلب.

?-قطة(أ)،كلب(ب).
أ = أبو الهول،
ب = روت وايلر.

أ = أبو الهول،
ب = القلطي.

أ = أبو الهول،
ب = بلدغ.

أ = أبو الهول،
ب = دوبيرمان؛

إلخ.

وفي المقابل، فإن تسلسل الأهداف هو كما يلي:

?-قطة(أ)، كلب(أ).

سيعطي هذا جميع الحيوانات التي هي قطة وكلب (في قاعدة البيانات، لا يوجد مثل هذا الحيوان). هنا A هي 'أي قيمة' في كل من cat(A) وdog(A)، ولكن يجب أن يكون لكليهما نفس القيمة.

?-قطة(أ)،كلب(أ).
لا