دورة في برمجة prolog

شذى الروح

  • Hero Member
  • *****
    • مشاركة: 3501
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
في: تـمـوز 13, 2010, 03:51:29 مسائاً
بســـــم الله الرحمن الرحـــيم

اللهم صلي على سيدنا محمد وعلى آله وصحبه أجمعين

سنقدم في هذه الدوره ان شاء الله  دروس لتعلم البرمجه بلغة البرولوغ (  PROLOG )

نبدأعلى بركة الله ..


 
الدرس الأول

النسخه التي اعتمدها في تطبيق  هذه الدوره هي version 4.000 of WIN-PROLOG

ولتنصيب هذه النسخه ( وكذالك الامر لباقي النسخ ) من خلال النقر على  SETUP.EXE



ومن ثم تشغيل واجهة البرنامج ( المترجم )  ..



ثم بعد تشغيل المترجم يبدأ بقراءة ملفات البرامج و وقبول الاستفسارت  والاسئله الخاصه بالبرنامج او الاستعلامات التي نريدها .

وللخروج من المترجم فقط قم بكتابة halt ويتبعها طبعا "."  

  halt.

طبعا ملفات البرولوغ دائما تكون بامتداد pl. او pro.

مقدمه :-

لغة البرولوغ تسمى لغة تعريفيه  واجرائيه ( تعريفيه  بمعنى انها  تعرف وتحدد ما يجب ان تكون عليه المخرجات واجرائيه بمعنى انها  تعرف كيف يتم الحصول على المخرجات  )

مكونات لغة البرولوغ  :-

1:- declaring :- بعض الحقائق عن المواضيع(العوامل )  والعلاقات بينها .
2:- defining   :- تعريف القواعد والشروط بين المواضيع والعلاقات بينها .
3:- asking    :- اسئله عن هذه المواضيع وعن العلاقات بينها
.
مكونات الجمل كما اشرنا لها سابقا :-

1:- Fact :- الحقائق والمعارف .
2:- Rules :- العلاقات والقواعد بينها وتشبه عمل ال Function في لغات  البرمجه الاخرى مثل الجافا والسي ++ وتحتوي على If/then  .
3:- Queries :- الاسئله والاستعلامات في المترجم والتي يتم العبور بها الى  الحقائق والقواعد ومن ثم بداية البرامج التي قمنا بها .

بكل بساطه لغة البرولوغ تجعل جهاز  الحاسوب يستخدم كمستودع للحقائق والعلاقات بينها , وتوفر سبل للوصول  للاستنتاجات .

الحقائق ( Fact )

الحقائق في لغة البرولوغ تعبر عن العلاقات بين المواضيع( العوامل)  من خلال  المعطى الذي يمثل المعرفه  .
Live(monkey,forest
وهنا في الجمله السابقه Live تمثل العلاقه بين monkey و forest ... ( اي ان  القرد يعيش في الغابه )
والجمله كامله بكل محتوياها تسمى clause
يطلق على المواضيع ( العوامل ) بــــ arguments
ويطلق على العلاقات بينها بـــــ predicate

Rules ( القواعد)

تحتوي على جزئيين هما :-



1:- جزء الشرط ----------> body of clause
2:- جزء الهدف ----------> head of clause

Queries ( الاستعلام )

الاستعلام او الاسئله  حيث تكبت في المترجم فيقوم المحرك ( engine ) بتتبع  الهدف من خلال الحقائق والقواعد الموجوده في قاعدة المعرفه ( ملاحظه مجموعة  الحقائق والقواعد في البرولوغ تسمى قاعدة المعارف ) .

كيف يكون استخدام الاسئله او الاستعلام في البرولوغ ؟

عندما يتم طرح سؤال في البرولوغ , يصار الى البحث في قاعدة البيانات والتي  اشرنا انها تمثل الحقائق والعلاقات بنها ( القواعد) , ومن ثم
يبحث عن الحقائق التي تطابق الاستعلام في السؤال , لذا فاذا وجد هذه  الحقائق التي تطابق فيكون الجواب بـــ " Yes " والعكس يكون "No " .
أمر مهم جدا :- اسماء المواضيع والعلاقات بينها يجب ان تبدأ بأحرف صغيره (  lowercase letter ).
والحقائق والجمل يجب ان تنتهي بــــ  " . "  

مثال :-   father(khaled, mohammad).  

----
اين نكتب برنامج البرولوغ ؟

الحقائق والقواعد تخزن في ملفات تمثل ما يسمى قاعدة المعارف  , ثم  عندما نريد العمل عليها نقوم  بتحميل هذه القاعدة من المعارف الى المترجم ,  وعندما نغير اي معلومه في هذه الملفات فيصار الى اعادة تحميلها مره اخرى  الى المترجم ( لكي يتم تفعيلها مره اخرى ) .

----
قراءة ملفات البرامج

 consult (filename).

---
Prolog Syntax

هنالك العديد من الشروط التي يجب مراعاتها عند كتابة الثوابت  والمتغيرات بالاضافه الى الانواع :-



الــ Atoms  يجب ان تتكون من الاحرف التاليه(شروط)  :-

1:- The upper-case letters
2:- The lower-case letters
3:- The digits
4:-The special characters مثل  +, -, *, /, <, >, =, :, ., &, ~,  _  
ولكن الشرط المهم هو انه عند كتابة ال Atoms لا يجب ان تبدأ بـــ  upper-case letters او  "_" .
امثله على الــ Atoms :-
   krrk, x15, x_, x___y, ahmad_khaled
<---> , ==>, … , .:. , ::=
باستثاء هذا الرمز " :- " لانه يمثل جزء من ادوات اللغه ( كما اشرنا سابقا  من انه يفصل بين الشرط والهدف في القواعد ) .
ممكن ان تكتب هكذا لكن بشرط وجود '  '   'Mohammad' , 'Othman Khaled '  

الــ Numbers

أعداد صحيحه  100 ,20 ,-90, 0
أعداد حقيقيه  3.99, -0.0001 , 10000.004

الــ Variables

تتكون من احرف وارقام و ايظا " _ " ,  وتبدا بــ upper-case  او " _  " .
ملاحظة :- عن استخدام " _ " بشكل فردي فلها معنى خاص حيث تسمى متغير مجهول .  
ونطاق عمل الـــ Variables يكون في الـــ clause  متظمنه داخلها ..
بمعنى اخر انه مثلا X16 يمثل متغير , وعندما يتواجد في 2 clause فهو يمثل  متغيران اثنان مختلفان عن بعض , اما عندما يكون هتالك  اكثر من X16 ولكن في  نفس الــ clause فكلها تمثل نفس المتغير وتعود له .

الـــ  Structures

 date (3, jan, 1982)
وتحتوي على اكثر من عامل , ويمكن ان تكون هذه العوامل متغيرات مثل :-
 date (Day, jan, 1982)
وهذا يعني ان اليوم اصبح متغير , وهذا يعطي اي يوم في شهر jan  وفي سنة  1982 .

تم  الدرس الاول بحمد الله .

القاكم في الدرس القادم ان شاء الله عز وجل
.                                       







منقول


شذى الروح

  • Hero Member
  • *****
    • مشاركة: 3501
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #1 في: تـمـوز 13, 2010, 04:02:45 مسائاً
الدرس الثاني

كما قلنا سابقا قاعدة المعارف في البرولوغ تمثل Fact و Rules ..
سنضع مثال على هذه الحقائق والقواعد وكيف يتم تمثيلها بالشكل الطبيعي (  اللغة الانجليزيه ).

 
الحقائق  تمثل التعريف بالعوامل  ( اي تثبيت الحقائق التي ستبنى  عليها القواعد )  ثم اعطاء كل شخص صلة قرابته بالاخر .

لنستطيع فهم المثال لاحظ التالي :-



اما كتابتها بصيغة لغة برولوغ فتكون كالتالي :-



هذا المثال فقط لتوضيح مبدأ الحقائق والقوعد بينها , وكيفية صياغتها بلغة  البرولوغ .

====
نبدأ  من هنا الشرح التطبيقي للغة برولوغ مع ذكر امثله .

1:- امتداد ملفات البرولوغ تكون pl.
2:- في حالة استدعاء المترجم تظهر اشارة
|?-  
وهي تعني ان المترجم جاهز لأي استعلام وسؤال , وفي حال لم تكن موجوده ( او  انه تم مسح الشاشه ) قم بكتابة هذا الامر على شاشة المترجم
Sicstus.
فيرجع المؤشر مره اخرى هكذا  
Sicstus.
~Z

| ?-
3:- ويتم استدعاء ملف البرنامج وتحميله في الذاكره ليكون جاهز للتفيذ  من  خلال احد هذه الاوامر  :-
|?- consult(File name ).
او
[File name].
او
['folder/filename'].
او من خلال اختيار File الموجود في الشاشة ( واجهة المترجم ) ومن ثم اختيار  load  وبعدها اختيار الملف الذي نريد تحميله في الذاكره , وبعد التحميل  والتفيذ  قم بسؤال ما تريد عن  الحقائق و القواعد الموجدوه في هذا  الملف  والذي يكون قد خزن في ذاكرة المترجم   .
اما كتابة البرنامج ( ملف البرنامج ) بامتدداد pl  , اختر من القائمه File  ثم New  ومن ثم قم بكتابة برنامجك وقم بتخزينه .
مثال :-
 
likes(sami, fish).
likes(sami, kaled).
likes(kaled, book).
likes(sami, book).
 
بعد ان قمنا بتخزين هذا الملف تحت اسم likes.pl , نعمل له تحميل الى  الذاكره , وهنا يكون البرنامج جاهز لأي سؤال او استفسار
مثال على الاستعلام :-
LPA WIN-PROLOG 4.000 - S/N 0010165739 - 18 Mar 1999
Copyright (c) 1999 Logic Programming Associates Ltd
Licensed To: HASSAN                               
| ?-
# Abolishing likes.pl [c:\documents and settings\compaq\desktop\]
# 0.00 seconds to consult likes.pl [c:\documents and settings\compaq\desktop\]
| ?- likes(sami,kaled).
yes

| ?- likes(kaled, book).
yes

| ?- likes(kaled, fish).
no

| ?-


===

List  of built-in operators in Prolog



وللمزيد  من الامثله عن هذه الادوات الموجوده في الماتلاب حمل المرفق التالي :-  

 Arithmetic and Constructing Expressions In  Prolog.rar (69.06كيلو )
 عدد مرات التحميل : 258


نهاية الدرس الثاني


شذى الروح

  • Hero Member
  • *****
    • مشاركة: 3501
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #2 في: تـمـوز 13, 2010, 04:07:53 مسائاً
الدرس  الثالث

قبل البدء في هذا الدرس , يوجد في كل نسخة برولوغ امر مساعده تستطيع الرجوع  له اثناء البرمحه , وما عليك الا كتابة help ( والامر الذي تريد استرجاع  معلومه او تفصيل عنه ) مثال على ذالك :-
1 ?- help(atom).
true.

2 ?-  
فتظهر لك الشاشه التاليه والتي تستطيع من خلالها مراجعة  هذا الامر  (  المساعده )

Resized to 77% (was 1177 x 515) - Click  image to enlarge


=======

للننتقل الى بداية الدرس .
ذكرنا في الدروس السابقة مقدمه للبرولوغ وتم التطرق لبعض الاوامر و  المواضيع التي يجب معرفتها عند بداية تعلم لغة البرولوغ , وفي هذا الدرس  سنكمل ما بدأنا به ان شاء الله ..
من اهم مميزات البرمجه بلغة  البرلولغ اننا نستطيع ان نكتب برامج صغيره ومختصره لمشاكل صعبه نسبيا وفي  نفس الوقت سهلة القراءه والفهم , وكباقي لغات البرمجه تستطيع ان تكتب  تعليقاتك الخاصه عن الاكواد التي تقوم بكتابتها و التي لن يقراها المترجم  ويتجاوز عنها  كما يلي  :-
1 ?- /* اكتب تعليقك هنا . */
====
في الجزء التالي سنقوم بشرح Lists في البرولوغ والتي تعتبر من اهم هياكل  البيانات في البرولوغ وسنقدم بعض الامثله عليها ان شاء الله ..

List Manipulation

تكتب القوائم في البرولوغ على شكل عناصر تفصل بينها فواصل داخل قوسين  معقوفين كالتالي :-
[ khaled , omar , sami , yazan ]
وبالامكان استخدام اي ارقام او متغيرات داخل هذه القوائم .
وتكون القائمه فارغة كالتالي :-
[]
تحتوي القائمه على ما يسمى الرأس والذيل حيث يمثل اول عنصر بها الرأس  والبقيه الذيل  :-
1 ?- [1, 2, 3, 4, 5] = [Head | Tail].
Head = 1,
Tail = [2, 3, 4, 5].

2 ?-
ملاحظه الرأس والذيل للقائمه هما تمثلان تعبيرات ومسميات فقط , ولتمييز  الذيل عن الرأس يتم استخدام الفارزه ( l )   فكل ما يأتي بعدها يمثل ذيل  القائمه مثال على ذالك , لو اردنا معرفة العنصر الذي يقع بين الرأس والذيل  لاحط المثال :-
4 ?- [khaled, sami , omar, adnan, yazan, slaem] = [_ ,  X  | _].
X = sami.

5 ?-
نلاحظ في المثال السابق ان الرأس كان ( khaled ) والذيل كأن بعد  l   وبالتالي هنالك قيمة  X  والتي تقع بين الرأس والذيل و وهي ( sami ).

ونستطيع الدمج بين قائمتين بشكل تسلسلي بناءاً على الداله concat_lists و  يحتوي هذا الامر على قائمتين او اكثر يتم  دمجهما و  يوضع متغير في اخر  الامر سيكون المتغير الذي يحتوي على القوائم المدموجه كالتالي :-
concat_lists(
[list1],
[list2],  Var ).

مثال :-
?- concat_lists([1, 2, 3], [d, e, f, g], X).
X = [1, 2, 3, d, e, f, g]
Yes

سنكمل الـــList وبعض الدوال  والادوات الخاصه بها لاحقا ان شاء الله ..

اعذروني للتاخير والبطء في الدروس ولكن الانشغالات هي التي تمنع , ان شاء  الله ما ان انتهي من هذه الانشغالات سأكثف الدروس ان شاء الله  بشكل متقارب  لتعم الفائده ..

وهذا رابط يحتوي على شروحات وامثله جيده للبرولوغ ارجو الاطلاع عليه ..
The Prolog  Dictionary

بالتوفيق ان شاء الله


ليلى الحياة100

  • Hero Member
  • *****
    • مشاركة: 3712
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #3 في: تـمـوز 13, 2010, 05:14:53 مسائاً
السلام عليكم ورحمة الله تعالى وبركاته

يعطيك الصحة اختي شدى والله كلمة شكر لاتكفيك ....ساكون من متتبعات الدورة ان شاء الله ....جزاكي الله خيرا كثيرا

...تحية


خليفة جوجو

  • Newbie
  • *
    • مشاركة: 5
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #4 في: آب 26, 2010, 02:18:01 مسائاً
السلام عليكم ورحمة الله وبركاته
أما المعلومات فهي قيمة، وصاحبها يستحق الشكر والامتنان.

رمضــان كريــم

                                    أخوكم خليفة


يوسف الضادي

  • Hero Member
  • *****
    • مشاركة: 5333
    • مشاهدة الملف الشخصي
    • http://www.sou9dz.com
    • البريد الالكتروني
رد #5 في: آب 26, 2010, 02:27:15 مسائاً
شكرا أختي شذى على الشرح المميز
لدي استفسار
ماذا تمكنني هاته اللغة ؟
يعني كيفية الاستفادة منها


شذى الروح

  • Hero Member
  • *****
    • مشاركة: 3501
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #6 في: آب 26, 2010, 10:44:24 مسائاً
شكرا لمرورك أخي خليفة


شذى الروح

  • Hero Member
  • *****
    • مشاركة: 3501
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #7 في: آب 26, 2010, 10:47:47 مسائاً
مقتبس من: benabdellah youcef;495337
شكرا أختي شذى على الشرح المميز
لدي استفسار
ماذا تمكنني هاته اللغة ؟
يعني كيفية الاستفادة منها


لغة prolog  من programmation logique

و هي الشطر التطبيقي من مادة logique math تدرس في نظام الاعلام الآلي سنة 3

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


المهندس

  • Administrator
  • Hero Member
  • *****
    • مشاركة: 3917
    • مشاهدة الملف الشخصي
    • http://www.ingdz.com
    • البريد الالكتروني
رد #8 في: آب 27, 2010, 03:17:09 صباحاً
بورك فيك اختنا الفاضلة و جزاك الله كل خير

موفقين ان شاء الله


يوسف الضادي

  • Hero Member
  • *****
    • مشاركة: 5333
    • مشاهدة الملف الشخصي
    • http://www.sou9dz.com
    • البريد الالكتروني
رد #9 في: آب 27, 2010, 08:44:09 صباحاً
مقتبس من: شذى الروح;495801

لغة prolog  من programmation logique

و هي الشطر التطبيقي من مادة logique math تدرس في نظام الاعلام الآلي سنة 3

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

شكرا أختي على الشرح
يعني يمكنني أعتبرها مثل logique mathe و THL
و حقيقة حتى هذه السنة عرفت أهميتهم لما قرءت عن كتاب كيف تبرمج كوميبلار
أمر مذهل و سهل نوعا ما
ربي يحفظك أختاه


شذى الروح

  • Hero Member
  • *****
    • مشاركة: 3501
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #10 في: آب 28, 2010, 10:29:44 مسائاً
هي اسهل اخي يوسف لأنها برمجة تقريبا و لا تأخذ وقت لإتقانها و اعرف انك مبرمج بارع راح تستمتع بها ان شاء الله سيكون لنا حديث مطول عنها في النادي


أمين المنتدى

  • Hero Member
  • *****
    • مشاركة: 1910
    • مشاهدة الملف الشخصي
    • http://www.ingdz.com
    • البريد الالكتروني
رد #11 في: أيلول 11, 2010, 09:49:00 صباحاً
بارك الله فيك الله لا يحرمنا منك ماشاء الله كل يوم لك ابداع


truth

  • Newbie
  • *
    • مشاركة: 2
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #12 في: تشرين الأول 24, 2010, 03:36:57 مسائاً
حبذا لو تضعي الرابط الذي نقلتي منه الدوره ...
 
بالتوفيق


truth

  • Newbie
  • *
    • مشاركة: 2
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #13 في: تشرين الأول 31, 2010, 05:14:33 مسائاً


mimik

  • Hero Member
  • *****
    • مشاركة: 1607
    • مشاهدة الملف الشخصي
    • البريد الالكتروني
رد #14 في: كانون الثاني 05, 2011, 12:25:27 مسائاً
شكرا لكل هدا الشرح بارك الله فيكي