• 0
Guest ( HASSAN )

دوره في تعلم لغة PROLOG

سؤال

بســـــم الله الرحمن الرحـــيم

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

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

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

post-168424-12664454556976_thumb.jpg

الدرس الأول

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

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

post-168424-12664451765355_thumb.gif

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

post-168424-1266445615219_thumb.jpg

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

وللخروج من المترجم فقط قم بكتابة 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 ( القواعد)

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

post-168424-1266497326738_thumb.jpg

1:- جزء الشرط ----------> body of clause

2:- جزء الهدف ----------> head of clause

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

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

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

عندما يتم طرح سؤال في البرولوغ , يصار الى البحث في قاعدة البيانات والتي اشرنا انها تمثل الحقائق والعلاقات بنها ( القواعد) , ومن ثم

يبحث عن الحقائق التي تطابق الاستعلام في السؤال , لذا فاذا وجد هذه الحقائق التي تطابق فيكون الجواب بـــ " Yes " والعكس يكون "No " .

أمر مهم جدا :- اسماء المواضيع والعلاقات بينها يجب ان تبدأ بأحرف صغيره ( lowercase letter ).

والحقائق والجمل يجب ان تنتهي بــــ " . "

مثال :-

 father(khaled, mohammad).

----

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

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

----

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

 consult (filename). 

---

Prolog Syntax

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

post-168424-12664939614902_thumb.jpg

الــ 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 .

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

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

تم تعديل بواسطه ( HASSAN )
4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

41 إجابة على هذا السؤال .

  • 0

الدرس الثاني

كما قلنا سابقا قاعدة المعارف في البرولوغ تمثل Fact و Rules ..

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

post-168424-12665260740533_thumb.jpg

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

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

post-168424-12665270565419_thumb.jpg

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

post-168424-12665275245084_thumb.jpg

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

====

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

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

post-168424-12665895104074_thumb.jpg

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

Arithmetic and Constructing Expressions In Prolog.rar

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

تم تعديل بواسطه ( HASSAN )
4

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمة الله وبركاته

شكراً لك أستاذ حسان على هذا الشرح الوافي، والدروس الممتعة

ان شاء الله سأكون من المتابعين لهذه الدورة

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الاستاذ الفاضل حسان، هل يمكن تحميل برنامج ال WIN-Prolog مجاناً من النت

وشكراً

تم تعديل بواسطه lug
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اخي حسن

اعتقد انها الافضل لبرمجة النظم الخبيرة؟هل انت من رايي ؟وهل تنصحني بالاتجاه لبرمجة ال CASE SYUDY الى البرولوج او الفيجوال بيسك؟

اذا ممكن تعطينا الرابط لتنزيل WIN PROLOG

تم تعديل بواسطه ريمممممممممم
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الصراحه اخي انا عندي النسخه كامله ولكن للاسف لا استطيع رفعها على النت , لانها نسخه مدفوعه ولا اريد ان اقع في مشاكل :)

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

عذرا اخي بارك الله فيك .

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اعتقد انها الافضل لبرمجة النظم الخبيرة؟هل انت من رايي ؟وهل تنصحني بالاتجاه لبرمجة ال CASE SYUDY الى البرولوج او الفيجوال بيسك؟

بارك الله فيكي اخت ريم , بالنسبه لي لا اجد اي مشكله في استخدام اي لغة برمجه في تطبيق الانظمه الخبيره , ولكن اذا وجتدي ان لديك القدره على البرمجه بالبرولوغ فهذا امر ممتاز , بل انا افضل البرولوغ في برمجة تطبيقات الذكاء الاصطناعي smile.gif مع انها اقل كفائه في بعض المكتبات وغير ذالك بالمقارنه مع لغات البرمجه الاخرى مثل الجافا أو السي ++ ولكي الخيار .

ملاحظه اخرى لا تستهيني بالبرولوغ فبها خصائص رائعه وان شاء الله سوف نطبقها في الدروس القادمه ان شاء الله .

سبب التعديل :- اظافة أي :)

تم تعديل بواسطه ( HASSAN )
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم ورحمه الله وبركاته

شكرا جزيلا للبشمهندس حسان وجزاك الله خيرا بجد شرح رائع ومتسلسل

بس فيه سؤال انا بحت عنه بس اتلخبط

difference between SWI prolog& visual prolog& win prolog

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

difference between SWI prolog& visual prolog& win prolog

SWI Prolog :- واجهة التنفيذ بالجافا وسي ++ ولا تدعم البرمجه الشيئيه و توفر مترجمات تفاعليه ( بمعنى انها INterpreted مثل الماتلاب والبيرل والبايثون )

Viusual prolog :- الواجهه بالــ سي ++ وتدعم البرمجه الشيئيه و لا توفر المترجمات التفاعليه بمعنى انها compiled اي انها تقوم بتحويل شيفرة المصدر ( اي تحويل شفرة المصدر الى برنامج تنفيذي ) ببساطه الــــ Visual prolog اسمح لك بعمل واجهة مستخدم للبرنامج افضل من swin

هذا على عجاله ..

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0
الصراحه اخي انا عندي النسخه كامله ولكن للاسف لا استطيع رفعها على النت , لانها نسخه مدفوعه ولا اريد ان اقع في مشاكل :)

لماذا لم تعتمد النسخة المجانيه من visual prolog لدروس هذه الدوره؟ اعتقد انها خيار افضل لتعلم وبناء تطبيقات برولوج.

بالتوفيق.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لماذا لم تعتمد النسخة المجانيه من visual prolog لدروس هذه الدوره؟ اعتقد انها خيار افضل لتعلم وبناء تطبيقات برولوج.

اهلا وسهلا اخي ابراهيم .. كلامك صحيح ولكن الهدف من استخدامي للنسخه الحاليه زيادة حجم الكود الذي سيكتب في الدروس المتقدمه , يعني المبدأ مثل ان تشرح اولا بالسي ++ ومن ثم تنتقل للــ Visual C++ :) , اجمالا ان شاء الله في دروس متقدمه سوف انتقل لعدة نسخ من البرولوغ ان شاء الله مع توضيح الفروقات ولو انها قليله برمجيا , حيث ان الذي يستطيع ان يبرمج باستخدام النسخه المستخدمه في الدوره يستطيع ان يبرمج على باقي النسخ ..

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

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

كلامك صحيح ولكن الهدف من استخدامي للنسخه الحاليه زيادة حجم الكود الذي سيكتب في الدروس المتقدمه , يعني المبدأ مثل ان تشرح اولا بالسي ++ ومن ثم تنتقل للــ Visual C++ , اجمالا ان شاء الله في دروس متقدمه سوف انتقل لعدة نسخ من البرولوغ ان شاء الله مع توضيح الفروقات ولو انها قليله برمجيا , حيث ان الذي يستطيع ان يبرمج باستخدام النسخه المستخدمه في الدوره يستطيع ان يبرمج على باقي النسخ ..

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

الاستاذ الفاضل حسان، هل تقصد أننا هنا يفضل أن نستخدم ال WIN-Prolog

لم نستطع الحصول على هذا البرنامج، هل لك أن تدلنا على بعض المواقع التي تسمح بالتحميل المجاني، فقط ممكن أن تذكر اسم الموقع

ولك جزيل الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تم الاتفاق مع د. حسان على اعتماد لغة SWI-Prolog المجانية كتطبيق عملي لهذه الدورة، يمكنكم تحميلها من هنا :

http://www.swi-prolog.org/download/stable

يمكن ايضا الاستفادة من الكتاب المجاني الذي يتعامل مع نفس الاصدار :

http://www.learnprolognow.org/

امثلة اضافية (ايضا على نفس الاصدار) :

http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/contents.html

وان شاء الله في المستقبل سيتم التطرق للغة visual prolog.

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تم الاتفاق مع د. حسان على اعتماد لغة SWI-Prolog المجانية كتطبيق عملي لهذه الدورة.

احسنت اخي العزيز وبارك الله فيك ..

===

اريد فقط في هذه المشاركه وعلى عجاله ان اوضح ان كل شرح الذي في بداية هذه الدوره تستطيع تنفيذه على هذه النسخه دون اي اختلاف ..

=_+_+_+_+_+_+_=

واتوقع ان الامر الذي قد يختلف ولو انه غير مهم جدا هو كيفية استدعاء الملف وترجمته لكي يكون جاهز للاستعلام والاسئله من خلال شريط الادوات في مترجم نسخة ال SWI

تتبع الصور التاليه ..

post-168424-12668780403334_thumb.jpg

----

نكمل قريبا ان شاء الله ..

تم تعديل بواسطه ( HASSAN )
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

جزاك الله خيرا انا ما زلت مبتدىء برولوج وإن شاء الله الدرس هذا يفيدنى كثير وارجوا المزيد ...

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

الدرس الثالث

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


1 ?- help(atom).
true.

2 ?-

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

post-168424-1268221395204_thumb.jpg

=======

للننتقل الى بداية الدرس .

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

من اهم مميزات البرمجه بلغة البرلولغ اننا نستطيع ان نكتب برامج صغيره ومختصره لمشاكل صعبه نسبيا وفي نفس الوقت سهلة القراءه والفهم , وكباقي لغات البرمجه تستطيع ان تكتب تعليقاتك الخاصه عن الاكواد التي تقوم بكتابتها و التي لن يقراها المترجم ويتجاوز عنها كما يلي :-


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

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

تم تعديل بواسطه ( HASSAN )
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

لقد بدأنا في السنة الثانية ببرمجة البرولوغ و انا خابب اتغلم , بس ممكن شوي عن البرولوغ و في ماذا يستخدم ؟

تم تعديل بواسطه Adios
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم

قرأت الدروس كاملة ولدي مجموعة من الأسئلة

- هل يجب قبل أن أقوم بتنفيذ اي برنامج بلغة البرولوج يجب أن يكتب أولاً في ملف خارجي مثل الnote pad أم أنه يمكن أيضاً الكتابة في المترجم مباشرة كأي لغة؟

يعني بالنسبة لمثال القوائم لازم اكتبه في ال note pad ام استطيع كتابته في المترجم مباشرة.

- هل الرأس والذيل للقوائم يعتبر ثابتاً في كل مرة، من خلال قراءتي للدرس الثالث فهمت أن الرأس ثابت أم الذيل فيمكن تحديده بحسب وضع مكان الفارزة ( | )، قد يكون فهمي خاطئ أرجو التوضيح.

- في الدرس الأخير، يعني مثلاً بعد كتابة القائمة، اقصد هل يستجيب البرنامج بشيء، أم يعرض، أم أنه فقط مجرد شرح سنستفيد منه في الدروس القائمة، يعني مثلاً في الدرس الأول كنت أقوم بعمل استعلاماات فيظهر لي yes أو no اقصد كان يظهر نتيجة، أما الآن لا أعرف ماذا سيظهر لي.

أتمنى الإجابة على هذه التساؤلات ولكم جزيل الشكر والتقدير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

االسلام عليكم

الاخوة الأفاضل في هذا المنتدى

أنا أنشأت مجلد مخصص لبرامج لغة برولوج، وقمت بعمل بعض البرامج البسيطة ووضعتها في هذا المجلد، فجأة حصلت على مجلد بالاسم xpce. وجدته في مجلد البرلوج اللذي أنشأته، المطلوب هل هذا المجلد له علاقة بالبرامج اللتي أنشأتها، ارجو التوضيح

مع جزيل الشكر

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

تكمله لل LIST

ماهي فائدة الـــ LIST بشكل عام .

لنعد للهدف العام من لغة برولوغ , لغة البرلوغ والتي تمثل التعامل مع المنطق والمنطق يحتاج للحقائق والقواعد لتحقيق الاستنتاجات و التحقق من النتائج , فكما قلنا مثلا :-

ارجع مره اخرى لكتابة البرنامج لاحظ الصوره التاليه .

post-168424-12687616576613_thumb.jpg

اذا ثم نقوم بكتابة بمايلي :-

likes( sami , chocolate, milk, bred)

من خلال الحقائق السابقه نقول ان سامي يفضل الــ chocolate و milk و bred

والان لو قمنا بالسؤال هل sami يفضل chocolate

Likes ( sami,chocolate).  

يكون الجواب NO

ولو سألنا ما هو الذي يفضله sami بشكل عام .

Likes( sami,what) .

فيكون الجواب ايضا ب NO

ما هو السر ؟ السبب بسيط جدا فالسؤال المفروض ان يتعامل مع 2 arg ( هكذا يقرا البرولوغ الحائق ) لكنه لدينا 4 arg في حالتنا هذه ..

اذا ما هو حلها ؟ الحل الامثل لها هو استخدام ال LIST من خلال وضع هذه القيم داخلها :-

likes( sami,[chocolate, milk,bred]) .

لنفرض اننا سألنا :-

9 ?- likes(sami,What).  What = [chocolate, milk, bred].10 ?- 

نلاحظ ان What نستخدمها للاستدلال , بالحاله هذه اعطتنا مالذي يفضله sami

ملاحظه :- W في What يجب ان تكتب بحرف كبير ( Capital )

اذا هنا نلاحظ ان الاستدعاء اعطى جميع قيم القائمه LIST والذي يمثل مالذي يفضله sami , حيث ان البرولوغ هنا تعامل مع القائمه على اساس انها 1 arg .

ومن ثم نستخدم هذه القائمه لمساعدتنا على استدعاء ومعرفة كل عنصر على حده مثل :-


0 ?- likes(sami,[X,Y,Z|W]).
X = chocolate,Y = milk,Z = bred,W = [].

فكما لاحظنا في المثال السابق قمنا باستدعاء محتويات القائمه كلُ على حده من خلال المتغيرات التي قمت بوضعها X وY و Z وW مثلت قيمه فارغه واشرنا لها بانها هي ذيل القائمه .

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

امر مهم :- القوائم يتم قرائتها بشكل خانات بمعنى , لاحظنا في المثال السابق انه تم تعويض واستدعاء القيم بــ Xو Y و Z على التوالي , وعندما وصل الى الذيل والذي لا يحتوي على قيمة يرجع بالقيمه فارغه بــ W

لنذكر بعض الامثل :-

نقوم هنا بعمل برنامج بحيث يعمل على استدعاء قيمة العنصر الثاني في القائمه :-


second_element([A,B,C|Rest],B).

هنا يقوم البرنامج بعمل فحص للقائمه فيتوقف عند العنصر الثاني بها ومن ثم يرجع بقيمته حيث اننا وضحنا ماهو العنصر الذي نريد ان نستدعيه من خلال وضعنا له في اخر القائمه وبعد Rest ( Result) :-

امثله على الاسئله :-

second_elemet([a,b,c,d,e,f],X).


15 ?- second_elemet([a,b,c,d,e,f],X).
X = b

مثال اخر :-

second_elemet([r,n,j,k,f,z],Y).


17 ?- second_elemet([r,n,j,k,f,z],Y)
.Y = n.18 ?-

يكون الجواب كما نلاحظ ان Y=n

مثال اخر :-

second_elemet(X,m).


| second_elemet(X,m).
X = [_G7778, m, _G7784|_G7785].20 ?-

لاحقا سنكمل القوائم وشرح بعض العمليات عليها ..

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

example.rar

تم تعديل بواسطه ( HASSAN )
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

- هل يجب قبل أن أقوم بتنفيذ اي برنامج بلغة البرولوج يجب أن يكتب أولاً في ملف خارجي مثل الnote pad أم أنه يمكن أيضاً الكتابة في المترجم مباشرة كأي لغة؟

يعني بالنسبة لمثال القوائم لازم اكتبه في ال note pad ام استطيع كتابته في المترجم مباشرة.

@@ اخر مشاركه لي , لاضير ان كتبته في note ولكن يوجد ملفات خاصه للبرولوغ تكتب بها برنامجك .pl

- هل الرأس والذيل للقوائم يعتبر ثابتاً في كل مرة، من خلال قراءتي للدرس الثالث فهمت أن الرأس ثابت أم الذيل فيمكن تحديده بحسب وضع مكان الفارزة ( | )، قد يكون فهمي خاطئ أرجو التوضيح.

@@ تفصل القائمه الى ذيل ورأس وما يأتي بعد | يمثل دائما الذيل للقائمه , لاحظ اخر مشاركه لي ستجد بعض فوائده .

- في الدرس الأخير، يعني مثلاً بعد كتابة القائمة، اقصد هل يستجيب البرنامج بشيء، أم يعرض، أم أنه فقط مجرد شرح سنستفيد منه في الدروس القائمة، يعني مثلاً في الدرس الأول كنت أقوم بعمل استعلاماات فيظهر لي yes أو no اقصد كان يظهر نتيجة، أما الآن لا أعرف ماذا سيظهر لي.

@@ هنا الاستعلام اخي بناءا على قاعدة الحقائق والتي تمثل البرنامج الذي قمنا بكتابته والاستعلام هنا سيقوم باسترجاع قيم موجوده في قاعدة الحقائق يعني مثلا فيما بعد سنقوم بشرح مثال على factorial ان شاء الله , فيما بعد هذه الحقائق سنتعامل معها كبرامج متكامله , انا اسف قد يكون هذا خطأي للتاخر في الشرح , لكن قريبا سوف اتعمق ان شاء الله وسيظهر لك ان ما تم شرحه كان مهم وسيسهل علينا ان شاء الله

أنا أنشأت مجلد مخصص لبرامج لغة برولوج، وقمت بعمل بعض البرامج البسيطة ووضعتها في هذا المجلد، فجأة حصلت على مجلد بالاسم xpce. وجدته في مجلد البرلوج اللذي أنشأته، المطلوب هل هذا المجلد له علاقة بالبرامج اللتي أنشأتها، ارجو التوضيح

مع جزيل الشكر

اولا انت قمت بكتابة برنامج GUI , هي ادوات تستخدم لتطوير التطبيقات الرسوميه في البرلولغ .

تم تعديل بواسطه ( HASSAN )
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

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

جزاك الله كل خير د.حسان، بالعكس ربما تأخيرك فيه فائدة لنا

اولا انت قمت بكتابة برنامج GUI , هي ادوات تستخدم لتطوير التطبيقات الرسوميه في البرلولغ .

بصراحة لم أفهم مقصدك

وشكراً جزيلاً على الرد

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

مشكور جداااااااا ع الشرح الوافي

وان شاء الله تكمل ع خير

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

السلام عليكم اخي حسن

بارك الله فيك على هدا الشرح الوافي

ولكن عندي مشكلة عندما استدعي الملف الذي كتبته يكتب لي

FILE NOT FOUND

مع اني متاكدة من تخزينه

post-222982-12688709044917_thumb.jpg

post-222982-12688711219921_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
  • 0

اسم الملف عندك RAMO وانتي لم تحملي الملف المطلوب بل كان aml . يجب ان تحملي اللف نفسه ..

هذا ما اراه في الصور المرفقه

بالتوفيق

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

من فضلك سجل دخول لتتمكن من التعليق

ستتمكن من اضافه تعليقات بعد التسجيل



سجل دخولك الان

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .