Professional Documents
Culture Documents
Artificial Intelligence Practical Lec 5
Artificial Intelligence Practical Lec 5
عملي
محتوى مجاني غير مخصص للبيع التجاري
00 السالسل في
5
برولوغ
05/24/2021 5 عملي مشترك
ال
ص
مبادئ الذكاء الصنعي
ف
حا
ت
تكلمنا في المحاضرة السابقة عن العودية وقمنا بحل تمارين متنوعة ,واآلن سوف نعيد حلها بطرق مختلفة
مالحظة :ال داعي هنا ,output variable Jألن العبارة ) isEven(0هي عبارة عن query ▪
استفهامية ترد قيمة trueأو . false
بنفس المبدأ إذا أردنا اختبار العدد أنه فردي أم ال فقط نغير شرط التوقف إلى ). isodd(1
Max .2
isPrime .3
نعلم أن العدد األولي هو العدد الذي اليقبل القسمة إال على نفسه وعلى الواحد.
وبالتالي سوف نلجأ الختبار قابلية قسمة العدد Xعلى األعداد من المجال ] , [2,Xفإذا قبل القسمة على عدد
ضمن المجال يكون غير أولي وإال يكون أولي,ولكن هنا ال نملك سوى بارامتر واحد وبالتالي سوف نتعرف على
ااـ rollالمساعدة (,)divوهي عبارة عن rollثانوية تستخدم ضمن ااـ rollالرئيسية(.)isPrime
-1اذا كان باقي قسمة العدد Xعلى Nتساوي 0نقوم بتقسيم العدد Xعلى Nونعيد االختبار على
العدد الجديد ,ثم نقوم بجمع Nللناتج النهائي لمجموع األعداد األولية.
-2اذا كان باقي قسمة العدد Xعلى Nال تساوي الصفر نقوم بالحفاظ على العدد Xونقوم بزيادة N
بمقدار 1ونعيد االختبار من جديد.
-شرط التوقف هنا هو أن يتساوى العدد مع Nوبالتالي نقوم بإرجاع .X
-
List
القوائم ضمن برولوغ:
-تعد القوائم من أكثر بنى المعطيات استخداما في البرولوغ,حيث نستطيع وضع نوع واحد من البيانات
أو أكثر .
-تكتب ضمن أقواس مربعة ]. L = [H | T
-يتم تعريف سلسلة في واجهة الـ Queryوتكتب بالشكل:
-يتم الوصول إلى عناصر القائمة باستخدام رأس القائمة ( )headو ذيل القائمة ( , )tailحيث يعبر الرأس
عن العنصر األول فقط والذيل عن باقي القائمة ,وقد يكون عنصر واحد أو سلسلة جديدة )(subList
حيث من الممكن أن تكون هذه السلسلة فارغة (يرمز للسلسلة الفارغة ب ][ ).
مثال: ▪
][1,2,3,4,5,6 ] 𝑒𝑠𝑙𝑎𝑓 [ 𝑡𝑟𝑢𝑒 ,
تمارين:
.1أوجد مجموع عناصر سلسلة:
فكرة الحل:
-لدينا سلسلة و متحول لجمع عناصر السلسلة ,نقوم باالستدعاء عوديا عند ذيل السلسلة ونضع في كل
مرة قيمة رأس السلسلة الجديدة في المتحول Zوالذي يعبر عن مجموع عناصر السلسة .
-شرط التوقف هو أن تكون السلسلة فارغة وبالتالي يكون مجموع عناصرها يساوي . 0
-لدينا سلسلة ومتحول للنتيجة ,إليجاد طول هذه السلسلة نقوم باالستدعاء العودي عند ذيل السلسلة
وال يهمنا هنا رأس السلسة ,طالما أننا لم نصل إلى نهاية السلسلة ويوجد ذيل للسلسلة نقوم بجمع 1
الى المتحول . Z
-شرط التوقف هو أن تكون السلسلة فارغة بالتالي طولها يساوي .0
-نستطيع اختبار فيما إذا كان العنصر موجود ضمن السلسلة عن طريق مقارنته مع رأس السلسلة ثم
رأس سلسلة الذيل ثم رأس سلسلة ذيل الذيل وهكذا ...
شرط التوقف أن يكون العنصر هو رأس السلسلة نفسه. -
L=[1,2,3,4].
H=1 ,T=[2,3,4].
Head of T =[2].
تمارين لإلطالع
.1اكتب تابع يقوم بإيجاد عنصر معين حسب indexما في سلسلة:
find([H|_],1,H).
find ([_|T],A,F):-A>1,A1 is A-1,find(T,A1,F).
توضيح الحل:
-يتم البدء باالنديكس من العدد 1أي أنه اليوجد اندكس , 0يقوم البرنامج باختبار االندكس اذا كان أكبر
من 1ثم يقوم بطرح 1واالستدعاء عوديا لبقية عناصر السلسلة حتى إيجاد العنصر المطلوب.
-شرط التوقف أن تكون السلسلة من عنصر واحد يقوم برد رأس السلسة.
merg([ ],X,X).
merg([H|T],L,[H|Y]):-merg(T,L,Y) .
توضيح الحل:
-قمنا وضع رأس السلسلة األولى في رأس سلسلة الخرج ,ومن ثم االستدعاء العودي لذيل السلسة
األولى مع كامل السلسلة الثانية و تكون سلسلة الخرج الناتجة عن االستدعاء العودي تكون هي ذيل
لسلسلة خرج االستدعاء األساسي.
-حيث يتحقق شرط التوقف عندما تكون السلسلة األولى فارغة ,وبالتالي سلسلة الدمج هي السلسلة
الثانية.
انتهت المحاضرة🔥