الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العودية في برلوغ

بدأه shado-ite في 13 مارس 2011 · 1 رد · 1,713 مشاهدة · في الذكاء الاصطناعي وتطبيقاته
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ساقدم موضوع في لغة prolog

يتحدث عن التوابع العودية

طبعا يلزم بقارئ هذا المقال معرفته بلغة prolog

على الاقل تطبيقاتها

لمحة موجزة: لغة مستخدمة في الذكاء الصنعي - تحتاج لمفسر لاضهار خرجها

التوابع

الكتابة في برلوغ

تتالف السينتاكس الخاص ببرلوغ من علاقات وحقائق يفصل بينها :-

نقطتين وداش مباشرة .

s(0):-nt(0).

2-المتغيرات تكتب ك capital letter for example X,Y,Z

3-يكتب برنامج برلوغ على محرر نصي كالمفكرة ويحفظ بلاحقة

pl

طبعا الهدف ليس تعليم سينتاكس برلوغ و التحدث عنها في هذا الموضوع

لهذا اختصرت قدر الامكان

هتالك تابع شهير وهو التابع s

حيث كل عدد في برلوغ يكتب بدلالة هذا التابع مثال

1=s(0).

2=s(s(0)).

3=s(s(s(0))).

7=s(s(s(s(s(s(s(0))))))).

ويعتبر تابعا مهما لانطلاق الحل !

يعرف العدد الطبيعي المحجوز ب العلاقة

nt(0)

العلاقة السابقة هي علاقة صحيحة لانو الصفر عبارة عن عدد طبيعي

وبالتالي كما اسلفنا يجب القارئ ان يعرف ان لغة برلوغ مؤلفة من حقائق و قواعد

لنبرهن ان كل عدد طبيعي هو من برلوغ

nt(s(X)):-nt(X).

كل عدد مهما كان هو عدد طبيعي

بنامج الكلي هو

nt(0).

nt(s(x):-nt(X).

برنامج برلوغ لحساب مجموع الاعدا

نفكر ما هو شرط محقق للبدا به هممممم

مجموع اي عدد مع الصفر هو نفس ذلك العدد هاد الشرط رقم واحد

sum(X,0,X).//------------1

بعدين لنرى انه لاي اعداد مجموع يحتاج

عدد اول x

عدد ثاني y

متحول و سيطي لتخزين النتيجة ليكن

z

وتتحقق العلاقة التالية ادناه

والتي يعبر عنها كما التالي

sum(s(X),Y,S(Z)):-sum(X,Y,Z).

البرنامج النهائي المعبر

sum(X,0,X).

sum(s(X),Y,S(Z)):-sum(X,Y,Z).

الضرب

قاعدة البداي=ضرب اي عدد بالصفر هو الصفر نعبر عنها

mult(0,X,0).//1

هنالك تاب اسمو مالت فيو و سيط اول الصفر وو سيط تاني اي عدد الوسيط التالت هو الصفر

لانو بالوسيط التالت منحط نتيجة الضرب و خلص

هلق العلاقة العامة

لنفكر قليلا علاقة ضرب اي عددين هي

نمشي العددمن الواحد الى ان يصبح مساويا للمضروب به

ونعمل جمع تراكمي للنتيجة مع y

ويخزن في x

مثال

2*3

ليكن x=2,

3=y

نبدا y=0

2+ mult(2,2),

2+2 +mult(2,1),

2+2+2+mult(2,0)

وصل لشرط التوقف يلي هو 6

عمليا هو وقف معناتو

عنا عملية ضرب و عملية جمع

بس مين مع مين

mult(x,y,z1),sum(z1,y,z)

mult(s(X),Y,Z):-mult(X,Y,Z1),sum(Z1,Y,Z).

التابع المعبر

mult(0,X,0).

mult(s(X),Y,Z):-mult(X,Y,Z1),sum(Z1,Y,Z).

اكتب تابع رفع اس لقوى

قاعدة البدا الحقيقية

اي عدد مرفوع لقوى الصفر ==1

power(x,0,s(0)).

لنفكر باالعلاقة العامة

بدنا نحسب عمليا اي عدد مرفوع لقوى

ممممم شو علاقة القوى بالجمع ؟

ممم منحط بعقلنا هالمثال

2اس 2 =4

اي

2+2=4;

2اس 3=8

يعني العدد منضربو بحالو 3 مرات بعطيك الناتج

اي

2+2+2=8

يعني العدد ضربو بنفسة اربع مرات بعطي

باختصار هو نتيجة استدعاء التابع نفسو مشان يتحقق من شرط التو قف

و عملية ضرب

power(X,s(Y),Z):-power(X,Y,Z1),mult(Z1,X,Z).

العدد الزوجي

even(0).

حقيقة ان الصفر زوجي

نبحث عن علاقة عامة يجب ان نفكر بشكل عودي

ممممممم

نمسك اي عدد ونطرح منو 2

ومنضل انقص حتي يوصل على الصفر

اي عدد مطروح منو 2 يعبر عنها

s(s(X))).

لانو متل ما اتفقنا

2=s(s(0)).

ومنستدي التابع نداء عودي مرة اخرى حتى نوصل

even (s(s(X))):-even(X).

العدد فردي

نبحث عن حقيقة عامة للانطلاق لتكن ان الواحد هو عدد فردي

odd(s(0)).

نطرح من اي عدد 2 و نضل نطرح مع كل استدعاء عودي حتى نصل للواحد متل ما عملنا هنيك

odd(s(s(X)):-odd(s(0).

مثلا

5=s(s(3)).

5=s(s(s(s(0).

فعلا وصلنا لشرط التو قف يلي هو s(0)

معناتو عنجد هو فردي

اكبر عدد و اصغر عدد

ازا كان الصفر مع اي عدد معناتو العدد اكبر من الصفر

على اعتبار نحذف القيم السالبة لانو انا بتعامل بلغة منطق ما تقبل علاقة سالبة

يا اما 1 او 0

يا اما

true or false

max(0,X,X).

max(S(X),s(Y),s(Z)):-max(x,y,z).

اصغر عدد بنفس الاسلوب

قاعدة البداي الصفر اصغر من اي عدد

min(0,X,0).

min(s(X),s(Y),s(Z)):-min(X,Y,Z).

العاملي

شرط الانطلاق عاملي الصفر 1

fact(0,s(0)).

لنحاول البحث عن علاقة عامة تشبك بين كل العلاقات السابقة من اجل اي عددين

x!=(x+1).x!

التعبير عنها يتم انه

نعمل استدعاء عودي من اجل x1

ونخزن النتيجة بالمتحول

z

وبعد نضربها

z1,s(X),z

fact(s(X),Z):-fact(X,Z1),mult(Z1,s(X),Z).

البرنامج الكلي

fact(0,s(0)).

fact(s(X),Z):-fact(X,Z1),mult(Z1,s(X),Z).

سلسلة فيبوناشي

تعتمد سلسلة فيبوناشي القواعد الرياضية التالية

fib(0)=1`;

fib(1)=1;

fib(n)=fib(n-1)+ fib(n-2);

لاحظ ان

fib (2)=fib(s(s(2)))=fib(s(0)),fib(0),sum(fib(0),fib(s(0))

هذه الحركة فقط لفهم كيفية كتابة السطر الاخير

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

fib(0,s(0)).

fib(s(0),s(0)).

fib(s(s(N)),Z):-fib(s(N),Z1),fib(N,Z2),sum(Z1,Z2,Z).

بالمرفقات ملف نصي جاهز للتطبيق على كل ما سبق

بس غير لاحقتو الى

pl

وشغلووو من مفسر الخاص ب swi prolog

slaaaaaaam

programms.zip

1
#2

بارك الله فيك

مواضيع مشابهة