كما في لغة ليسب فإن البرولوج توفر استخدام القوائم (Lists) والقائمة هي إما عنصر Atom)) يمثل قائمة فارغة ([]) وإما تركيب مكون من معاملين (Arguments Two) الرأس (Head) والذيل (Tail) محصورين داخل قوسين مربعين ([]) ويمثل الرأس العنصر الأول (First Element) والذيل باقي العناصر . فمثلا في القائمة [a , b , c , d ,e,]فإن العنصر (a) يمثل رأس القائمة وباقي العناصر تمثل ذيل القائمة .
والمثال التالي يمثل كيفية استخدام القوائم في البرولوج:
وإذا اعتبرنا الحقيقة التالية:
([ ,Friends([a ,b , c , d ,e
فإذا أردنا معرفة رأس القائمة و ذيلها نكتب السؤال التالي :
?([Friends([Head |Tail
Or
?([Friends([Head |...Tail
فيجب البرولوج بالآتي:
Head =a
[Tail=[b,c,d,e
أي أن ذيل القائمة هو أيضا قائمة فرعية
وبهذه الإمكانية يمكننا بناء الدوال الذاتية الموجودة في لغة ليسب ، مثل (car) و(cdr) و(member) في لغة البرولوج .فعلى سبيل المثال يمكن كتابة الدالة (member) في لغة البرولوج ، بتعريفها بالقاعدتين التاليتين :
1- العنصر (A) عضو(member) في القائمة (P) إذا كان (A) هو أول عنصر في (P).
2- إذا لم يكن (A) هو أول عنصر في (P) فإن (A) يكون عنصرا في(P) فقط إذا كان عنصر في ذيل القائمة (P) .
وتكتب هاتان القاعدتان في لغة البرولوج كالتالي :
.([_|member(A ,[A
.(member(A ,[_ |Y]):- member(A ,Y
ففي القاعدة (أو الحقيقة ) الأولى نعرف أن المسند (member) يتحقق إذا كان العنصر (A) هو أول عنصر في القائمة بغض النظر عن ذيل القائمة ( وتعرف هذه بوضع العلامة (_) وتسمى (Underscore) مكان ذيل القائمة )
اما في القاعدة الثانية فإن المسند (member) يتحقق إذا كان عنصرا في ذيل القائمة بغض النظر عن رأس القائمة وهذه القاعدة تسمى بالقاعدة التكرارية (Recursive) .


ليست هناك تعليقات:
اضافة تعليق