Introduction to Prolog (Chapters 1 & 2)

مقدمة
  • الـ Prolog هي لغة برمجة منطقية (Logic Programming).
  • بتعتمد على الـ Declarative Programming (البرمجة الوصفية) بدلاً من الـ Procedural (الإجرائية).
  • بتستخدم بشكل أساسي في تطبيقات الذكاء الاصطناعي (AI) والأنظمة الخبيرة (Expert Systems).

ايه هي لغة Prolog؟

  • ا PROLOG اختصار لـ: PROgramming in LOGic.
  • البرنامج في Prolog عبارة عن Knowledgebase (قاعدة معرفة) بتتكون من:
    1. ا Facts (حقائق): حاجات دايمًا صح.
    2. ا Rules (قواعد): بتعتمد على شروط تانية عشان تكون صح.

العناصر الأساسية للـ Prolog

1. الـ Facts

بتعبر عن علاقة بين الـ Objects أو خاصية لشيء معين، وبتكون دايمًا صح (Always True).

  • مثال علي علاقة: .likes(aly, hany) -> علي بيحب هاني (حب اخوي).
  • مثال علي خاصية: .green(rose) -> الوردة لونها اخضر.
  • الـ Relation: هي likes.
  • الـ Objects: هي aly و hany.
قواعد كتابة الـ Facts
  • اسم العلاقة والـ objects لازم يبدأوا بـ lower-case.
  • اسم العلاقة بيتكتب الأول وبعده الـ objects بين قوسين.
  • لازم تنتهي بـ Full stop (نقطة .).
  • الترتيب مهم: likes(aly, hany) معناها علي بيحب هاني، مش العكس.

2. الـ Rules

  • بتستخدم الرمز :- اللي معناه IF.
    • مثال: parent(X, Y) :- father(X, Y).
    • معناها ان X هو والد Y لو كان X هو أبو Y.
ملحوظه ملهاش لازمه
  • ا parent يعني والد يعني ممكن يبقي اب او ام , اما father يعني اب الي هو parent وفي نفس الوقت male

3. الـ Questions

بتبدأ بالرمز ?- في الـ interpreter.

  • الـ Prolog بيدور في قاعدة البيانات من أول سطر لسطر، وبيقارن (Matching) كل Fact مع السؤال.
  • لو لقى تطابق تام (نفس الـ Predicate ونفس الـ Arguments) -> yes، لو ملقهاش -> no.

الـ Predicates

في Prolog، الـ Predicate هو الاسم اللي بنطلقه على الكلمة اللي بتيجي قبل القوسين في أي حقيقة (Fact) أو قاعدة (Rule).

  • الـ Facts والـ Rules الاتنين بيُعتبروا تعريفات للـ Predicate.
  • الـ Head في الـ Predicate بيتكون من:
    1. اسم الـ Predicate (الـ Name).
    2. الـ Arguments (المعاملات/المُدخلات) اللي ممكن تكون ثوابت (Constants) أو متغيرات (Variables).

الـ Variables

  • ا Variables لازم تبدأ بـ Capital letter (ا Upper Case) أو _ ( underscore) هنعرف معناها قدام.
  • بنستخدمها لما نكون عايزين نسأل "مين اللي بيحب هاني؟" بدل "هل علي بيحب هاني؟".
  • مثال: ?- likes(X, hany).
  • ا Prolog هيرجع قيمة X. لو فيه أكتر من حل، بنضغط ; عشان نشوف الباقي، وآخر حاجة يرجع no.

الـ Operators

الرمز المعنى بالمنطق
:- ا IF (لو)
, ا AND (و)
; ا OR (أو)

الـ Conjunctions (الربط)

ممكن نربط أكتر من حاجة باستخدام الفاصلة , (AND).

  • مثال: ?- likes(mary, X), likes(john, X).
  • السؤال ده معناه: "هل فيه حاجة Mary و John الاتنين بيحبوها؟".

بيئة العمل (SWI-Prolog)

  1. بنكتب الـ knowledgebase في ملف ونحفظه بامتداد .pl (مثلاً family.pl).
  2. بنفتح الـ SWI-Prolog ونعمل Consult للملف عشان يحمله:
    • بنكتب: [family]. أو consult(family). (متنساش النقطة في الآخر).
  3. بعد كده نقدر نسأل الأسئلة (Queries).

المقارنات ( Comparison operators)

ممكن نستخدم المقارنات زي أصغر من < في الأسئلة:

  • مثال: ?- age(Name, Age), Age < 40.
  • السؤال ده معناه: "هات لي كل الأسماء اللي سنها أصغر من 40".

قبل ما تدخل علي المحاضره الي بعدها حل امثلة المحاضرة والسكاشن من هنا : Chapter 1 & 2 - Practice

Nour Eldeen Mahmoud