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 طرق:
    1. حروف وأرقام و Underscore: لازم تبدأ بحرف صغير (Lower-case).
      • أمثلة صحيحة: anna, x25, x_y.
    2. رموز خاصة (Special Characters):
      • أمثلة صحيحة: <---->, ==>, ::.
    3. أي نصوص بين Single Quotes (' '): دي بتسمحلك تحط مسافات أو تبدأ بحرف كابيتال.
      • أمثلة صحيحة: ' Tom ', 'South America', 'Sarah Jones'.
أمثلة على 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 هم الفروع.

date
(Functor)

1

may

2001

تمثيل المعادلات الحسابية

  • المعادلات الحسابية في الـ Prolog بتتعامل كـ Structures، حيث العمليات (زي + و *) هي الـ Functors.
  • مثال للمعادلة: (a + b) * (c - 5)
    • تتكتب كـ Structure كده: *( +(a, b), -(c, 5) ) حاجة شبه الـ prefix , postfix الي اخدناها في الداتا ستراكتشر قبل كده.

Multiply (*)

Add (+)

Subtract (-)

a

b

c

5


2. الـ Matching (المطابقة / Unification)

  • من أهم العمليات في الـ Prolog هي الـ Matching. بنقول إن قيمتين (Terms) بيطابقوا بعض لو كانوا:
    1. متطابقين تماماً (Identical).
    2. أو نقدر نعوض في المتغيرات اللي فيهم عشان يبقوا متطابقين.

قواعد المطابقة الأساسية:

  1. لو Constants : بيطابقوا بعض لو هما نفس الحاجة بالظبط (مثلاً may = may).
  2. لو Variable مع أي حاجة: بيطابقها فوراً والمتغير بياخد القيمة دي (استني لما تشوف الامثله تحت عشان تفهم) .
  3. لو 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

Nour Eldeen Mahmoud