اذهب إلى المحتوى
  • 0

لغه برولوك prolog ما هي الفوارق بين مصفوفة Array و قائمة List و قائمة اختيار menu

رحيق الزهور

السؤال

Recommended Posts

  • 0
  • إن List هي بنية معطيات مدعومة ضمن لغة برولوك، نضع فيها قيم مختلفة، وتتكون بشكل رئيسي من رأس القائمة head و الذيل وفيه بقية العناصر tail.

التعامل مع القوائم في Prolog :

  1. يعبر عن القائمة الخالية ب [ ]
  2. أما القوائم غير الخالية فتأخذ الشكل: [Head |Tail]

مثال: إذا كتبنا الحقيقة التالية:

factlist([a,b,m,j,k]).

ومن ثم سألنا الاستفسار التالي في مفسر ال Prolog :

?- factlist([Head|Tail]).

سيكون الجواب :

Head= a
Tail= [b,m,j,k].

لتمييز نوع العناصر ذرات أما قوائم يمكن استخدام الإسنادات التالية:

  1. atom(X) تكون صحيحة إذا كان الوسيط فعلا ذرة. ولكن لا يمكن استخدام هذه الإسنادية مع الأرقام !
  2. is_list(X) تكون صحيحة إذا كان الوسيط فعلا قائمة. ويمكن أن تكون عناصر القائمة أرقام

مثال: ( تطبيق find في المثال الأخير) البحث عن عنصر ضمن قائمة:

member( _ , _ )

للبحث عن عنصر ضمن قائمة.

  1. X قيمة نبحث عنها
  2. القائمة
  3. نقارن الرأس أي أول عنصر من القائمة مع العنصر الذي نبحث عنه، وفي حال لم يتم التطابق يتم البحث في باقي عناصر القائمة والتي هي Y (قائمة الذيل) نفس القائمة الأولى بدون أول عنصر
member2(X,[X|_]).
member2(X,[_|Y]):- member2(X,Y).

 

  • أما Array: فهي غير موجودة من أصل اللغة، أي لا يمكن الحصول على قائمة مفهرسة (لا يمكن الوصول للعنصر 3 مباشرة) أي يتم التعامل مع القوائم بشكل قوائم مترابطة Linked List وعليك المرور عليهم بطريقة عودية من خلال استدعاء الدالة التي تقوم بالتجوال على القائمة مع تمرير عداد لمعرفة ترقيم العناصر أو فحص القيم الخاصة بهم.

أي لتشكيل قائمة لها طول ثابت عليك تعريف هذا الموضوع برمجياً بشكل مخصص.

 

  • أما menu هي عبارة عن قائمة اختيارات ممكنة للمستخدم، لتنفيذ إجراءات أو استعلامات محددة مسبقاً.

يتم العمل بهذه menu على شكل حلقة تكرارية تطبع الخطوات الممكنة التي يقوم بها البرنامج ثم تستقبل دخل المستخدم و تنفذ الإجرائية ثم تعود لطباعة قائمة الاختيارات.

تستخدم القائمة menu الأمر repeat للتكرار و المثال التالي لاستعراض قائمة اختيارات ثم تنفيذ فعل action محدد بالرقم المدخل من المستخدم.

main :-
    repeat,                             % تكرار طباعة القائمة
    write('-------MENU-------'), nl,
    write('1. add'), nl,
    write('2. find'), nl,
    write('3. delete'), nl,
    write('4. exit'), nl,
    write('Choose : '),
    read(Z),                      % قراءة دخل المستخدم
    ( Z = 4 -> !, fail ; true ),  % ايقاف البرنامج if Z = 4
    action_for(Z),                % تنفيذ الإجرائية
    fail.                         % إيقاف البرنامج لدخل  4

يكون الإجرائية أو الدالة action for مكتوبة من المبرمج مثال:

action_for(X) :-
    write('Action for '),
    write(X), nl.
...

سيكون التنفيذ:

| ?- main.
-------MENU-------
1. add
2. find
3. delete
4. Exit
Choose : 1.
Action for 1
-------MENU-------
1. add
2. find
3. delete
4. Exit
Choose : 2.
Action for 2
-------MENU-------
1. add
2. find
3. delete
4. Exit
Choose : 4.

no
| ?-

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...