البرمجة التصريحية: الحقائق، القواعد والأهداف
| English | العربية |
|---|---|
| fact/fækt/ | حقيقة |
| declarative programming/dɪˈklærətɪv ˈprəʊɡræmɪŋ/ | البرمجة التصريحية |
| rule/ruːl/ | القاعدة |
| goal/ɡəʊl/ | هدف |
| backtrack/ˈbæktræk/ | الرجوع للخلف |
| unification/ˌjuːnɪfɪˈkeɪʃn/ | التوحيد |
اسأل من يمكنه استعارة كاميرا
- يحافظ نادي الوسائط على حقائق حول أعضائه والتدريب المكتمل. يريد أن يسأل من يمكنه استعارة كاميرا دون كتابة حلقة تكرار جديدة لكل سؤال.
- البرمجة التصيرية تصف الحقائق والقواعد والـ هدف. يبحث محرك المنطق عن قيم تجعل الهدف صحيحًا. يجب على المبرمج لا يزال كتابة قواعد صحيحة؛ المحرك لا يقرأ الأفكار أو لوحات الإعلانات في النادي.
الحقائق تنص على ما هو معروف
- الحقيقة هي ادعاء في قاعدة المعرفة. في
member(aya).، يرتبط الفعلmemberشخصًا واحدًا عضوية النادي. يرتبطtrained(aya, camera).شخصًا بقطعة معدات. - تستخدم هذه الدرس صيغة بروجول: الأسماء以小写 (lowercase) تمثل ثوابت أو محددات؛ والأسماء بأحرف كبيرة (uppercase) تمثل متغيرات. النقطة تُمهد نهاية كل حقيقة أو قاعدة.
member(aya).
member(ben).
member(chen).
trained(aya, camera).
trained(chen, camera).
trained(ben, audio).
بافتراض وجود الحقيقتين member(ben). و trained(ben, audio).، أي من العبارات التالية يُعد حقيقة مُقدَّمة؟
member(ben). مُعطاة مباشرة. قاعدة المعرفة لا تتضمن تدريب بن على الكاميرا.
القاعدة تجمع بين الشروط
- القاعدة تحدد متى يكون الاستنتاج صحيحاً. يُقرأ
:-على أنه "إذا" والفاصلة تعني AND: يمكن للشخص استعارة الكاميرا إذا كان عضواً وتملك تدريباً على الكاميرا. Personيرمز لنفس المتغير في المكانين الثلاثة. يجب على المحرك إيجاد قيمة واحدة تحقق كلا الشرطين، وليس عضواً وشخصاً مدرباً مختلفاً.
can_borrow(Person, camera) :- member(Person), trained(Person, camera).
في القاعدة can_borrow(Person, camera) :- member(Person), trained(Person, camera).، تعني الفاصلة بين الشرطين ____.
يجب أن يتحقق كل من العضوية وتدريب الكاميرا لنفس الشخص.
الهدف يطرح سؤالاً
- الهدف
?- can_borrow(aya, camera).يطلب نتيجة نعم/لا. يطابق المحرك القاعدة ويحقق منmember(aya)وtrained(aya, camera): كلا الحقيقتين موجودتان، لذا يتحقق الهدف. - الهدف
?- can_borrow(Person, camera).يطلب ربطات المتغير. مع قاعدة المعرفة هذه، الإجابات هيPerson = ayaوPerson = chen. هذه أهداف للتفكير المنطقي؛ المربعات المعروضة هي صيغة وليست بيئة تشغيلية قابلة للتنفيذ.
أعضاء النادي هم آيا، بن وشين. آيا وشين مدربان على الكاميرا؛ بن مدرب فقط على الصوت. تتطلب القاعدة can_borrow(Person, camera) كلا من العضوية وتدريب الكاميرا. من يحقق شرط can_borrow(Person, camera)؟
آيا وشين لديهما الحقيقتان المطلوبتان. بن لديه تدريب صوتي فقط.
قد يكون قيمة متغير Person في member(Person) مختلفة عن Person في trained(Person, camera) خلال إثبات واحد.
يجب أن تظل جميع occurrences للمتغير نفسه ذات ارتباط (binding) موحد في ذلك الإثبات.
مثال محلول: تتبع مرشح غير ناجح
- ابدأ بـ
Person = ben.member(ben)تنجح.trained(ben, camera)تفشل: حقيقة التدريب المتاحة خاصة بالصوت، ولا تتطابق مع الكاميرا. - يعود المحرك للخلف ليعمل مرشحاً آخر،
Person = chen. كلا الشرطين ينجحان. إذا طُلبت إجابات إضافية، يستمر البحث؛ وإذا لم يعد هناك مرشحين، فلا توجد إجابات أخرى.
تتبع عملية البحث المتبقية بعد إرجاع آيا.
بن عضو لكن يفتقر لحقيقة تدريب مطابقة للكاميرا؛ المحرك يحاول شين بعدها.
المطابقة توزع القيم عبر القاعدة
- المطابقة تطابق الحدود مع ربط المتغيرات بشكل متسق. مطابقة
trained(Person, camera)معtrained(chen, camera)تربطPersonبـchen؛ ومطابقتها معtrained(ben, audio)تفشل لأن المعدات مختلفة. - هدف فاشل يعني أنه لا يمكن إثباته من هذه الحقائق والقواعد. لا يثبت ذلك أن بن لم يستخدم كاميرا قط في الواقع؛ قد تكون قاعدة المعرفة ببساطة غير مكتملة.
مطابقة trained(Person, camera) مع trained(chen, camera) تربط Person بـ ____.
المعدات تتطابق والوسيط الأول يوفر الربط chen.
مثال محلول: كتابة قاعدة جديدة
- المتطلب: يمكن للموجه مساعدة شخص ما فقط عندما يمتلك الموجه تدريباً على الكاميرا والمتعلم عضو. أضف القاعدة أدناه، ثم اطرح
?- can_help(aya, ben).. trained(aya, camera)وmember(ben)موجودان، لذا يتحقق الهدف. تسمح هذه القاعدة لأيا بمساعدتها نفسها أيضاً. إذا كان يجب استثناء المساعدة الذاتية،则需要 إضافة شرط آخر؛ لا تخترعه بصمت.
can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner).
بافتراض trained(aya, camera). و member(ben).، والقاعدة can_help(Mentor, Learner) :- trained(Mentor, camera), member(Learner).، هل can_help(aya, ben) تنجح؟
Aya لديها تدريب على الكاميرا و Ben عضو؛ لا يشترط أن يكون Ben مدرباً على الكاميرا ليكون متعلماً.
علامات ضائعة
- الحقيقة تُعبّر عن شيء معروف؛ تستنتج القاعدة结论ًا عندما تتحقق شروطها؛ يطرح الهدف ما إذا كان يمكن إثبات الاستنتاج أو أي قيم تجعله صحيحاً.
- حافظ على consistency المتغيرات المكررة.
member(X), trained(Y, camera)سيسمح للعضو غير المدرب بالترشح لأن شخصاً آخر لديه تدريب. تغيير اسم المتغير يمكن أن يغير معنى القاعدة.
من المتطلب إلى البرهان
- اكتب الحقائق، وحوّل كل متطلب إلى قاعدة، وصغ هدفاً. تتبع ارتباط كل متغير عبر كل شرط وحاول البدائل عند فشل المرشح.
- هنا فقط آية وشين يمكنهما استعارة كاميرا. التدريب الصوتي لبن ليس تدريباً على الكاميرا. النتائج تنبع من قاعدة المعرفة المقدمة، لا من تخمين حول أشخاص حقيقيين.
أعضاء النادي هم aya و ben و chen. Aya و Chen مدربان على الكاميرا؛ Ben مدرب على الصوت فقط. تتطلب قاعدة can_borrow(Person, camera) عضوية وتدريباً على الكاميرا معاً. كم عدد الأشخاص الذين يحققون can_borrow(Person, camera)؟
Aya و Chen هما الحلّان.
فشل الهدف يُثبت أن الحدث المرافق لم يحدث أبداً خارج هذه قاعدة المعرفة.
الفشل يعني عدم إمكانية إثبات الهدف من الحقائق والقواعد المتاحة.