Prolog Syntax & Structures (Lecture 4)
مقدمة
- في المحاضرة دي هنفهم أكتر عن الـ Syntax في الـ Prolog.
- هنتعمق في أنواع البيانات (Data Objects) والـ Structures وإزاي بنمثلها.
- هنعرف إزاي الـ Prolog بيعمل Matching (مطابقة أو Unification) بين البيانات المختلفة.
- وهنراجع على أدوات الربط المنطقية (Conjunction & Disjunction) وأولوياتها.
1. أنواع البيانات (Data Objects / Terms)
- كل البيانات في Prolog بنسميها Terms. بتنقسم لنوعين أساسيين زي ما بدأنا نفهم قبل كده:
أولاً: Simple Objects
- بتشمل الـ Constants والـ Variables
1. الـ Atoms
- دي ثوابت نصية ممكن تتكتب بـ 3 طرق:
- حروف وأرقام و Underscore: لازم تبدأ بحرف صغير (Lower-case).
- أمثلة صحيحة:
anna,x25,x_y.
- أمثلة صحيحة:
- رموز خاصة (Special Characters):
- أمثلة صحيحة:
<---->, ==>,::.
- أمثلة صحيحة:
- أي نصوص بين Single Quotes (
' '): دي بتسمحلك تحط مسافات أو تبدأ بحرف كابيتال.- أمثلة صحيحة:
' Tom ','South America','Sarah Jones'.
- أمثلة صحيحة:
- حروف وأرقام و Underscore: لازم تبدأ بحرف صغير (Lower-case).
أمثلة على Atoms غلط (Non-Valid):
- ا
2340ieh(بتبدأ برقم). - ا
george-smith(فيها Dash-). - ا
Void(بتبدأ بحرف Capital -> دي كده Variable). - ا
_alpha(بتبدأ بـ Underscore -> دي كده Variable).
2. الـ Numbers
- أرقام صحيحة (Integers): زي
1,1313,-97. - أرقام عشرية (Real Numbers): زي
3.14,-0.0035.
3. الـ Variables
- لازم تبدأ بحرف كبير (Upper-case) أو Underscore (
_).- أمثلة:
X,Result,_x23.
- أمثلة:
- الـ Anonymous Variable (المتغير المجهول
_): بنستخدمه لو محتاجين نسأل عن حاجة بس مش مهتمين بقيمتها (مش عايزين نطبعها).- مثال:
?- parent(X, _).(مين اللي عنده أي أبناء وخلاص؟ مش مهم أسامي الأبناء).
- مثال:
ثانياً: Structured Objects
الـ Structure هو كائن واحد بيتكون من مجموعة كائنات تانية جواه (Components).
- شكلها:
functor(component1, component2, ...) - الـ Functor: هو اسم الـ Structure (ولازم يكون Atom يعني بيبدأ بحرف صغير).
- الـ Components: هي العناصر اللي جوه، وممكن تكون ثوابت، متغيرات، أو حتى Structures تانية (Nested).
ملحوظة
نقدر نستخدم متغيرات جوة الـ Structure عادي، زي: date(Day, may, 2001).
تمثيل الـ Structures كشجرة (Tree Representation)
- أي Structure نقدر نتخيله على شكل شجرة. الـ Functor هو الـ Root (الجذر)، والـ Components هم الفروع.
تمثيل المعادلات الحسابية
- المعادلات الحسابية في الـ Prolog بتتعامل كـ Structures، حيث العمليات (زي
+و*) هي الـ Functors. - مثال للمعادلة:
(a + b) * (c - 5)- تتكتب كـ Structure كده:
*( +(a, b), -(c, 5) )حاجة شبه الـ prefix , postfix الي اخدناها في الداتا ستراكتشر قبل كده.
- تتكتب كـ Structure كده:
2. الـ Matching (المطابقة / Unification)
- من أهم العمليات في الـ Prolog هي الـ Matching. بنقول إن قيمتين (Terms) بيطابقوا بعض لو كانوا:
- متطابقين تماماً (Identical).
- أو نقدر نعوض في المتغيرات اللي فيهم عشان يبقوا متطابقين.
قواعد المطابقة الأساسية:
- لو Constants : بيطابقوا بعض لو هما نفس الحاجة بالظبط (مثلاً
may = may). - لو Variable مع أي حاجة: بيطابقها فوراً والمتغير بياخد القيمة دي (استني لما تشوف الامثله تحت عشان تفهم) .
- لو Structures (أشياء مركبة): بيطابقوا بعض فقط لو:
- ليهم نفس الـ Functor (نفس الاسم).
- ليهم نفس الـ Arity (نفس عدد الـ Components/Arguments).
- وكل Component بيطابق الـ Component اللي في نفس مكانه الناحية التانية.
أمثلة على الـ Matching:
- مثال 1:
?- date(4, M, 2001) = date(D1, may, Y1).
-
النتيجة:
D = 4,M = may,Y1 = 2001(المطابقة نجحت). -
مثال 2 (Nested Structures):
?- addr(flat(4), street('Home Str.'), postcode(eh8_9lw)) = addr(flat(Z), Yy, postcode(Xxx)).
- النتيجة:
Z = 4,Yy = street('Home Str.'),Xxx = eh8_9lw(المطابقة بتشتغل بشكل تكراري Recursively على العناصر الداخلية).
3. أدوات الربط والأولويات (Conjunction & Disjunction)
| الأداة | الرمز | المعنى | الأولوية (Binding Strength) |
|---|---|---|---|
| Conjunction | , |
AND (و) - لازم كل الشروط تكون صح. | أقوى (Stronger) |
| Disjunction | ; |
OR (أو) - كفاية شرط واحد يكون صح. | أضعف (Weaker) |
مثال على الأولويات:
- لو كتبنا:
P :- Q, R; S, T, U.
- عشان الـ
,(AND) أقوى، الـ Prolog بيفهمها كأنها متقسمة بقوسين كده:
P :- (Q, R) ; (S, T, U).
- يعني كأننا كتبنا قاعدتين منفصلين:
P :- Q, R.
P :- S, T, U.
قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : Chapter 4 - Practice