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

سؤال بسيط في ال Prolog

مغلق
بدأه ibn_als3odiah في 13 نوفمبر 2005 · 9 رد · 1,980 مشاهدة · في هندسة البرمجيات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي استفسار بسيط عن ال Prolog:

لنفترض انني اكتب برنامج لتحديد الاخوان (brothers ) لشخص معين

ولدي ال facts التاية:

brother(ahmad,saleh).
brother(ahmad,suliman).
brother(ahmad,mohammed).

فكيف أكتب Query بحيث الناتج يكون saleh-suliman-mohammed

لأنه لو كتبنا

?-brother(ahmad,X).

النتيجة راح تكون فقط:

X=saleh

?

فأرجو المشاركة للتوصل الى الحل

وجزكم الله كل خير

أخوكم

ibn_als3odiah

3424.gif
#2

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

و الله لي زمن من الذكاء الصناعي :D ... لكن ممكن يكون الحل استخدام شرط منطقي للربط بين الجمل و هو and جرب :

brother(ahmad,X) and brother(ahmad,Y) and brother(ahmad,Z)

و السلام ،،

بنت اليمن ..

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

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#3

السلام عليكم

شكرا اختي الفاضلة على الرد

بالنسبة لل and لم أستعملها من قبل لانه ممكن وضع فواصل بين الشروط في rule معين

ولكن يبدو انك فهمتيني خطا

أنا لا أريد الأخ المشترك بين الأشخاص الثلاثة

بل من فرضيتي أنهم كلهم اخوان لأحمد

فأريد اكتب query بحيث انه يعطيني جميع اخوان أحمد اللي هم (saleh-suliman-mohammed)

أنا الآن أقرأ في موضوع يبدو انه حل المشكلة وهو وضع ; SemiColon بعد اول نتيجة فيواصل البرنامج سرد جميع أخوان احمد

والله أحمد هذا وأخوانه مشكلة :angry:

سأجربه ولي عودة

وبانتظار الاخوان

شكرا مرة أخرى بنت اليمن

3424.gif
#4

معليش اخي ibn_als3odiah هي محاولة بس من الذاكرة الخلفية :D

بس انا اذكر ان عملية الاستعلام تمر على كل الحقائق .. و لمن تعمل and اكثر من مرة سوف تمر على كل الحقائق مرة تلو الاخرى .. (جرب حكاية and و إن شاء الله الخير على ايديها :) )

انا ما عندي prolog الآن و الا كنت جربت لك كذا حل ... و لكن كان الله في عونك ...

بنت اليمن ...

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

(* ربِ اجعلني مقيم الصلاة و من ذريتي ، ربنا و تقبل دعـاء *)

يا حيّ يا قيـوم ... برحمتك استغيث ... اصلح لي شأني كله و لا تكلني الى نفسي طرفة عين

#5

اخي الكريم , يجب عليك اولا تعريف مجموعة امور وهي : تعريف علاقة العضو Member وهي كتالي :

predicates 
member(string,s).
father(string,string).
haschildren(string,s).

ثم في الكلاسس
clauses
member(X,[X|T]).
member(X,[H|T]):-member(X,T).

بفتراض ان الأب سامي له ثلاثة اولاد
haschildren(sami,[child1,child2,child3]).
تعريف علاقة الأبوة
father(X,Y):- haschildren(X,W),member(Y,W).

علاقة الأخوة الآن 
brother(X,Y):-father(Z,X),father(Z,Y),X<>Y.

تم تعديل هذه المشاركة بواسطة fmo_82 في 13 نوفمبر 2005 في 13:14

#6

أنا أعطيك حل جدا فعال...

إن كل ما طتبته هول صحيح!!

ولكنك تحتاج حاجة بسيطة...

وهي طلب معلومات أكثر من قبل المترجم

فإذا أعطاك أول نتيجة

فكل ما عليك هو

أنك تطلب معلومات اضافية بكتابة ; في نهاية السطر

وخلاص...

1 ?- brother(ahmad,X).

X = saleh ;

X = suliman ;

X = mohammed ;

لماذا تكون الليغو اللعبة الأكثر عبقرية في العالم؟

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

-----

وائل بن أحمد كابلي

مستشار تطوير برمجيات | مايكروسوفت للخدمات الاستشارية

MCSE | MCTS SharePoint Infrastructure | MCTS SharePoint - Development | MCP | MSF Essentials

http://blogs.msdn.com/wael

@waelkabli

#7

بنت اليمن شكرا لك,,,, يكفي تشريفك لي هنا وكتابة الرد وجزاك الله خير على المساعدة

أستاذي fmo

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

راح أجرب طريقتك مع انه شكلها معقده حبتين

أشكرك كل الشكر على المساعدة ودمت بخير.

أخي MEMONONO

بالظبط هذا ماكنت أريده بحيث بعد كل semiColon يعطيني أخ لاحمد الى ان أصل للنهاية

كل الشكر لك أخي.

تم حل المشكلة بفضل الله ثم بفضلكم وفعلا تشرفت بردودكم

ودمتم بخير

أخوكم

ibn_als3odiah

3424.gif
#9

شكرا أخوي فواز

3424.gif
#10

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

أخي العزيز ابن السعودية

هذه اول مشاركة الي بالمنتدى ويارب ما تكون اخر مشاركة

بخصوص برنامجك فلازم تكتب بالبداية الحقائق (facts) وبعدها تكتب القاعدة (rule) الي راح يعمل عليها البرنامج

هي كالتي

parent(father,ahmed).
parent(father,saleh).
parent(father,suliman).
parent(father,mohammed).

brother(X,Y):-parent(P,X),parent(P,Y),X\==Y.

وتعطي الـ query كالأتي

brother(ahmed,X).

راح ينطيك

X--->saleh
X--->suliman
X--->mohammed

واذا نطيت الـ query بصورة عامة مثل

brother(B,X).

راح ينطيك كل الاحتمالات

جرب وإن شاء الله يفيدك الرد

تحياتي للجميع

تم تعديل هذه المشاركة بواسطة همس الحنين في 17 فبراير 2008 في 11:59

هذا الموضوع مغلق.

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…