Unification In Prolog لمحه بسيطه عن gnu prolog unification process

الناقل : elmasry | الكاتب الأصلى : Eisa Ayed | المصدر : www.arabteam2000-forum.com



حقيقة احترت بكيفية كتابة الموضوع لكن بالمجمل هذه لمحه بسيطه عن ال unification

ال Unification هو باختصار مايعمله ال prolog interpreter عندما تعطيه اي استعلام ..
فهو يحاول ان يجد حل لهذا الاستعلام عن طريق عمل unify بين الاستعلام query وبين الحقائق الموجوده لديه facts and rules.

فلنفرض ان لديك المعلومات التاليه :

age(ahmed,23).
age(khaled,40).
age(ahmed,30).


وتريد ان تستعلم عن عمر احمد .. ففي محرر البرولوق بتكتب التالي :

age(ahmed,X).


فالكلمات التي تبدأ بحروف كبيره هي متغيرات variables
ماعداه فهي ثوابت constants or atoms

هنا انت تطلب من البرنامج ان يبحث لك عن قيمة للمتغير X تتماشى مع المعلومات التي لديك ..
والنتيجه هي X=23

العمليه بسيطه :
1- ان كل تيرم له نفس عدد الاريقيومنت :
age(a,b) cannot be unified with age (X)

2- ان الاسم لكلاهما هو نفس الاسم :
age(a,b) cannot be unified with agee(X,Y)

3- المتغير يأخذ أي قيمه ولايستطيع ان ياخذ قيمتين مختلفتين بنفس الوقت
age(a,b) cannot be unified with age(X,X)

4- الثابت constant لا يعمله unify إلا مع نفسه
age(a,b) cannot be unified with age(b,b).

5- اذا كان احد الطرفين متغير فقيمته الجديده هي قيمة الطرف الآخر
مثال :
unify(X,f(z,b,c,d))
X=f(a,b,c,d)


في الحاله الخامسه اذا كان الطرف الآخر يحتوي على نفس المتغير في داخله فهذه سوف تنتهي بايرور .
مثال
unify(X,f(a,b,c,X))

فال X هنا هو نفسه يحمل الطرف الآخر وكل مره ينادي نفسه
لذلك هناك دالة unify_with_occurs_check في gnu prolog لمنع هذا الشئ ..

للاستزاده
http://web.uvic.ca/~...olog/unify.html