You are on page 1of 5

‫‪150‬‬

‫عملي‬
‫محتوى مجاني غير مخصص للبيع التجاري‬
‫‪00‬‬ ‫السالسل في‬
‫‪5‬‬
‫برولوغ‬
‫‪05/24/2021‬‬ ‫‪5‬‬ ‫عملي مشترك‬
‫ال‬
‫ص‬
‫مبادئ الذكاء الصنعي‬
‫ف‬
‫حا‬
‫ت‬

‫تكلمنا في المحاضرة السابقة عن العودية وقمنا بحل تمارين متنوعة‪ ,‬واآلن سوف نعيد حلها بطرق مختلفة‬

‫‪is Even. .1‬‬

‫مالحظة ‪ :‬ال داعي هنا ‪,output variable J‬ألن العبارة )‪ isEven(0‬هي عبارة عن ‪query‬‬ ‫▪‬
‫استفهامية ترد قيمة ‪ true‬أو ‪. false‬‬

‫بنفس المبدأ إذا أردنا اختبار العدد أنه فردي أم ال فقط نغير شرط التوقف إلى )‪. isodd(1‬‬

‫محتوى مجاني غير مخصص للبيع التجاري‬


‫‪1‬‬
‫مبادئ ذكاء صنعي | عملي مشترك‬

‫‪Max .2‬‬

‫‪isPrime .3‬‬
‫نعلم أن العدد األولي هو العدد الذي اليقبل القسمة إال على نفسه وعلى الواحد‪.‬‬
‫وبالتالي سوف نلجأ الختبار قابلية قسمة العدد ‪ X‬على األعداد من المجال ]‪ , [2,X‬فإذا قبل القسمة على عدد‬
‫ضمن المجال يكون غير أولي وإال يكون أولي‪,‬ولكن هنا ال نملك سوى بارامتر واحد وبالتالي سوف نتعرف على‬
‫ااـ ‪ roll‬المساعدة (‪,)div‬وهي عبارة عن ‪ roll‬ثانوية تستخدم ضمن ااـ ‪ roll‬الرئيسية(‪.)isPrime‬‬

‫‪ .4‬ايجاد مجموع العوامل األولية لعدد ما‪:‬‬

‫فكرة الحل ‪:‬‬

‫‪ -‬سوف نقوم بقسمة العدد بدأً من ‪ Y = 2‬ونميز حالتين ‪:‬‬

‫‪ -1‬اذا كان باقي قسمة العدد ‪ X‬على ‪ N‬تساوي ‪ 0‬نقوم بتقسيم العدد ‪ X‬على ‪ N‬ونعيد االختبار على‬
‫العدد الجديد‪ ,‬ثم نقوم بجمع ‪ N‬للناتج النهائي لمجموع األعداد األولية‪.‬‬
‫‪ -2‬اذا كان باقي قسمة العدد ‪ X‬على ‪ N‬ال تساوي الصفر نقوم بالحفاظ على العدد ‪ X‬ونقوم بزيادة ‪N‬‬
‫بمقدار ‪ 1‬ونعيد االختبار من جديد‪.‬‬
‫‪ -‬شرط التوقف هنا هو أن يتساوى العدد مع ‪ N‬وبالتالي نقوم بإرجاع ‪.X‬‬

‫‪-‬‬

‫محتوى مجاني غير مخصص للبيع التجاري‬


‫‪2‬‬
‫‪/ITE.RBCs‬‬
‫مبادئ ذكاء صنعي | عملي مشترك‬

‫‪List‬‬
‫القوائم ضمن برولوغ‪:‬‬

‫‪ -‬تعد القوائم من أكثر بنى المعطيات استخداما في البرولوغ‪,‬حيث نستطيع وضع نوع واحد من البيانات‬
‫أو أكثر ‪.‬‬
‫‪ -‬تكتب ضمن أقواس مربعة ]‪. L = [H | T‬‬
‫‪ -‬يتم تعريف سلسلة في واجهة الـ ‪ Query‬وتكتب بالشكل‪:‬‬

‫‪[H|T] = [vlaues. . ].‬‬


‫‪Ex: [H|T]=[1,2,6,9].‬‬

‫‪ -‬وعند التنفيذ ‪:‬‬

‫‪H = “Head Element”.‬‬ ‫‪Ex: H=1.‬‬


‫‪T = “Tail List”.‬‬ ‫‪Ex: T=[2,6,9].‬‬

‫‪ -‬أمثلة على السالسل‪:‬‬

‫])‪[1,2,3,4,5] , [true, true, false] , [isPrime(X), isEven(X‬‬

‫])‪[1, false, isPrime(X‬‬

‫‪ -‬يتم الوصول إلى عناصر القائمة باستخدام رأس القائمة (‪ )head‬و ذيل القائمة (‪ , )tail‬حيث يعبر الرأس‬
‫عن العنصر األول فقط والذيل عن باقي القائمة‪ ,‬وقد يكون عنصر واحد أو سلسلة جديدة )‪(subList‬‬
‫حيث من الممكن أن تكون هذه السلسلة فارغة (يرمز للسلسلة الفارغة ب ][ )‪.‬‬

‫مثال‪:‬‬ ‫▪‬
‫]‪[1,2,3,4,5,6‬‬ ‫] 𝑒𝑠𝑙𝑎𝑓 ‪[ 𝑡𝑟𝑢𝑒 ,‬‬

‫‪head‬‬ ‫‪tail‬‬ ‫‪head‬‬ ‫‪tail‬‬

‫مالحظات هامة ‪:‬‬ ‫▪‬


‫عند التعامل مع الـ ‪ list‬ويكون هناك إسناد نستخدم = وليس ‪. is‬‬ ‫▪‬
‫في السلسلة الفارغة يتم طباعة ‪ false‬ألنها ال تحتوي على ‪ head‬و ‪.Tail‬‬ ‫▪‬

‫محتوى مجاني غير مخصص للبيع التجاري‬


‫‪3‬‬
‫‪/ITE.RBCs‬‬
‫مبادئ ذكاء صنعي | عملي مشترك‬

‫‪ ‬تمارين‪:‬‬
‫‪ .1‬أوجد مجموع عناصر سلسلة‪:‬‬

‫فكرة الحل‪:‬‬

‫‪ -‬لدينا سلسلة و متحول لجمع عناصر السلسلة ‪,‬نقوم باالستدعاء عوديا عند ذيل السلسلة ونضع في كل‬
‫مرة قيمة رأس السلسلة الجديدة في المتحول ‪ Z‬والذي يعبر عن مجموع عناصر السلسة ‪.‬‬
‫‪ -‬شرط التوقف هو أن تكون السلسلة فارغة وبالتالي يكون مجموع عناصرها يساوي ‪. 0‬‬

‫‪ .2‬ايجاد طول سلسلة ‪:‬‬

‫‪ -‬لدينا سلسلة ومتحول للنتيجة ‪ ,‬إليجاد طول هذه السلسلة نقوم باالستدعاء العودي عند ذيل السلسلة‬
‫وال يهمنا هنا رأس السلسة ‪,‬طالما أننا لم نصل إلى نهاية السلسلة ويوجد ذيل للسلسلة نقوم بجمع ‪1‬‬
‫الى المتحول ‪. Z‬‬
‫‪ -‬شرط التوقف هو أن تكون السلسلة فارغة بالتالي طولها يساوي ‪.0‬‬

‫‪ .3‬اختبار عدد هل هو ضمن السلسلة أم ال ‪:‬‬

‫‪ -‬نستطيع اختبار فيما إذا كان العنصر موجود ضمن السلسلة عن طريق مقارنته مع رأس السلسلة ثم‬
‫رأس سلسلة الذيل ثم رأس سلسلة ذيل الذيل وهكذا ‪...‬‬
‫شرط التوقف أن يكون العنصر هو رأس السلسلة نفسه‪.‬‬ ‫‪-‬‬

‫محتوى مجاني غير مخصص للبيع التجاري‬


‫‪4‬‬
‫‪/ITE.RBCs‬‬
‫مبادئ ذكاء صنعي | عملي مشترك‬

‫‪ .4‬تابع يعيد ثاني عنصر في السلسلة‪:‬‬

‫ثاني عنصر من أي سلسلة هو رأس سلسلة الذيل ‪.‬مثال ‪:‬‬

‫‪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‬واالستدعاء عوديا لبقية عناصر السلسلة حتى إيجاد العنصر المطلوب‪.‬‬
‫‪ -‬شرط التوقف أن تكون السلسلة من عنصر واحد يقوم برد رأس السلسة‪.‬‬

‫‪ .2‬اكتب برنامج يقوم بدمج سلسلتين مع بعضهما ‪:‬‬

‫‪merg([ ],X,X).‬‬
‫‪merg([H|T],L,[H|Y]):-merg(T,L,Y) .‬‬

‫توضيح الحل‪:‬‬

‫‪ -‬قمنا وضع رأس السلسلة األولى في رأس سلسلة الخرج ‪,‬ومن ثم االستدعاء العودي لذيل السلسة‬
‫األولى مع كامل السلسلة الثانية و تكون سلسلة الخرج الناتجة عن االستدعاء العودي تكون هي ذيل‬
‫لسلسلة خرج االستدعاء األساسي‪.‬‬
‫‪ -‬حيث يتحقق شرط التوقف عندما تكون السلسلة األولى فارغة ‪,‬وبالتالي سلسلة الدمج هي السلسلة‬
‫الثانية‪.‬‬

‫انتهت المحاضرة🔥‬

‫محتوى مجاني غير مخصص للبيع التجاري‬


‫‪5‬‬
‫‪/ITE.RBCs‬‬

You might also like