مقدمة
لغة البرمجة المنطقية Prolog هي لغة برمجة منطقية تعود أصولها إلى الذكاء الاصطناعي ، وإثبات النظريات الآلي ، واللغويات الحاسوبية . [ 1 ] [ 2 ] [ 3 ]
تستند لغة برولوج إلى منطق الرتبة الأولى ، وهو منطق صوري . وعلى عكس العديد من لغات البرمجة الأخرى ، تُعتبر برولوج في المقام الأول لغة برمجة تصريحية : فالبرنامج عبارة عن مجموعة من الحقائق والقواعد التي تُحدد العلاقات . وتبدأ عملية الحساب بتنفيذ استعلام على البرنامج. [ 4 ]
كانت لغة برولوج من أوائل لغات البرمجة المنطقية [ 5 ] ، ولا تزال الأكثر شيوعًا حتى اليوم، مع توفر العديد من التطبيقات المجانية والتجارية. وقد استُخدمت هذه اللغة في إثبات النظريات [ 6 ] ، وأنظمة الخبراء [ 7 ] ، وإعادة كتابة المصطلحات [ 8 ] ، وأنظمة الأنواع [ 9 ] ، والتخطيط الآلي [ 10 ] ، والإجابة على الأسئلة [ 11 ] [ 12 ] [ 13 ] ، بالإضافة إلى مجال استخدامها الأصلي، وهو معالجة اللغة الطبيعية [ 14 ] [ 11 ] .
لغة البرمجة Prolog هي لغة برمجة عامة الأغراض كاملة تورينج ، وهي مناسبة تمامًا لتطبيقات معالجة المعرفة الذكية.
تاريخ
| سنة | إيكس مارسيليا | معيار ISO/IEC |
|---|---|---|
| 1972 | مقدمة 0 | غير متوفر |
| 1973 | مقدمة ١ | غير متوفر |
| 1982 | مقدمة ٢ | غير متوفر |
| 1990 | مقدمة الجزء الثالث | غير متوفر |
| 1995 | غير متوفر | 13211-1:1995 |
| 1996 | مقدمة ٤ | غير متوفر |
| 2000 | غير متوفر | 13211-2:2000 |
| 2007 | غير متوفر | 13211-1:1995/Cor 1:2007 |
| 2012 | غير متوفر | 13211-1:1995/Cor 2:2012 |
| 2017 | غير متوفر | 13211-1:1995/Cor 3:2017 |
| 2025 | غير متوفر | 13211-3:2025 |

اختار فيليب روسيل اسم "برولوج" بناءً على اقتراح زوجته، كاختصار لعبارة "Programmation en log ique" ( البرمجة المنطقية بالفرنسية ). [ 15 ] وقد طُوِّرت هذه اللغة حوالي عام 1972 على يد آلان كولميرور وفيليب روسيل، من مجموعة الذكاء الاصطناعي في كلية العلوم بجامعة لوميني في إيكس مارسيليا الثانية بفرنسا. واستندت إلى تفسير روبرت كوالسكي الإجرائي لعبارات هورن ، وكان الدافع وراءها جزئيًا الرغبة في التوفيق بين استخدام المنطق كلغة تمثيل معرفي تصريحية والتمثيل الإجرائي للمعرفة الذي كان شائعًا في أمريكا الشمالية في أواخر الستينيات وأوائل السبعينيات. ووفقًا لروبرت كوالسكي ، طُوِّر أول نظام برولوج عام 1972 على يد كولميرور وفيليب روسيل. [ 16 ] [ 17 ] [ 18 ] كان أول تطبيق للغة برولوج عبارة عن مترجم مكتوب بلغة فورتران من قِبل جيرارد باتاني وهنري ميلوني. أخذ ديفيد إتش دي وارن هذا المترجم إلى جامعة إدنبرة ، وهناك طوّر واجهة أمامية بديلة، والتي أصبحت فيما بعد تُعرّف صيغة " إدنبرة برولوج " المستخدمة في معظم التطبيقات الحديثة. كما طوّر وارن أول مُصرّف للغة برولوج، مُنشئًا مُصرّف DEC-10 برولوج المؤثر بالتعاون مع فرناندو بيريرا. لاحقًا، عمّم وارن الأفكار الكامنة وراء DEC-10 برولوج، ليُنشئ آلة وارن المجردة ( WAM ).
فضّل باحثو الذكاء الاصطناعي الأوروبيون لغة برولوج، بينما فضّل الأمريكيون لغة ليسب ، مما أدى، بحسب التقارير، إلى العديد من النقاشات القومية حول مزايا اللغتين. [ 19 ] وقد جاء جزء كبير من التطور الحديث للغة برولوج من زخم مشروع أنظمة حاسوب الجيل الخامس (FGCS)، الذي طوّر نسخةً من برولوج تُسمى لغة النواة لنظام التشغيل الأول الخاص به .
كانت لغة برولوج النقية في الأصل تقتصر على استخدام مُثبت نظرية الاستدلال مع عبارات هورن بالشكل التالي:
H :- B 1 , ..., B n .
يعامل تطبيق برنامج إثبات النظرية هذه البنود كإجراءات:
لإظهار/حل H، أظهر/حل B 1 و ... و B n .
ومع ذلك، سرعان ما تم توسيع لغة برولوج النقية لتشمل النفي كفشل ، حيث يتم إظهار الشروط السلبية من الشكل not(B i ) من خلال محاولة حل الشروط الإيجابية المقابلة B i والفشل في ذلك .
أدخلت التوسعات اللاحقة للغة برولوج من قبل الفريق الأصلي قدرات برمجة المنطق المقيد في التطبيقات.
تأثير
على الرغم من الاستخدام الواسع للغة برولوج في البحث والتعليم، [ 20 ] إلا أن برولوج ولغات البرمجة المنطقية الأخرى لم تُحدث تأثيرًا كبيرًا على صناعة الحواسيب بشكل عام. [ 21 ] فمعظم التطبيقات صغيرة الحجم وفقًا للمعايير الصناعية، ونادرًا ما يتجاوز عدد أسطر التعليمات البرمجية فيها 100,000 سطر. [ 21 ] [ 22 ] وتُعتبر البرمجة على نطاق واسع معقدة لأن بعض مُجمِّعات برولوج لا تدعم الوحدات النمطية، كما توجد مشكلات توافق بين أنظمة الوحدات النمطية لمُجمِّعات برولوج الرئيسية. [ 23 ] وقد مثّلت قابلية نقل تعليمات برولوج البرمجية بين التطبيقات المختلفة مشكلةً أيضًا، ولكن التطورات التي طرأت منذ عام 2007 أدت إلى: "أن قابلية النقل ضمن عائلة تطبيقات برولوج المُشتقة من إدنبرة/كوينتوس جيدة بما يكفي للسماح بالحفاظ على تطبيقات واقعية قابلة للنقل." [ 24 ]
تعرضت البرامج المطورة بلغة برولوج لانتقادات بسبب انخفاض أدائها بشكل ملحوظ مقارنةً بلغات البرمجة التقليدية. فعلى وجه الخصوص، قد تُشكل استراتيجية التقييم غير الحتمية في برولوج مشكلةً عند برمجة العمليات الحسابية الحتمية، أو حتى عند استخدام "عدم الحتمية غير المُبالية" (حيث يتم اختيار خيار واحد بدلاً من التراجع عبر جميع الاحتمالات). وقد يتطلب الأمر استخدام عمليات القطع وغيرها من بنيات اللغة لتحقيق الأداء المطلوب، مما يُفقد برولوج إحدى أهم مزاياها، وهي القدرة على تشغيل البرامج "عكسيًا وأماميًا". [ 25 ]
لغة برولوج ليست لغة وصفية بحتة: فبسبب بنيات مثل عامل القطع ، يلزم قراءة إجرائية لبرنامج برولوج لفهمه. [ 26 ] يُعد ترتيب العبارات في برنامج برولوج ذا أهمية بالغة، إذ تعتمد عليه استراتيجية تنفيذ اللغة. [ 27 ] لغات برمجة منطقية أخرى، مثل داتالوج ، هي لغات وصفية بحتة، لكنها تُقيّد اللغة. ونتيجة لذلك، تُكتب العديد من برامج برولوج العملية لتتوافق مع ترتيب البحث العميق أولاً في برولوج ، بدلاً من كتابتها كبرامج منطقية وصفية بحتة. [ 25 ]
الاستخدام في الصناعة
استُخدمت لغة برولوج في واتسون . يعتمد واتسون على برنامج DeepQA من IBM وإطار عمل Apache UIMA (بنية إدارة المعلومات غير المهيكلة). كُتب النظام بلغات برمجة متعددة، منها جافا وسي++ وبرولوج، ويعمل على نظام التشغيل SUSE Linux Enterprise Server 11 باستخدام إطار عمل Apache Hadoop لتوفير الحوسبة الموزعة. تُستخدم برولوج لمطابقة الأنماط على أشجار تحليل اللغة الطبيعية. وقد صرّح المطورون قائلين: "كنا بحاجة إلى لغة تُسهّل علينا التعبير عن قواعد مطابقة الأنماط على أشجار التحليل والتعليقات التوضيحية الأخرى (مثل نتائج التعرف على الكيانات المسماة)، وتقنية قادرة على تنفيذ هذه القواعد بكفاءة عالية. وجدنا أن برولوج هي الخيار الأمثل نظرًا لبساطتها وقدرتها التعبيرية ." [ 11 ] تُستخدم برولوج أيضًا في منصة التطوير منخفضة التعليمات البرمجية GeneXus ، التي تركز على الذكاء الاصطناعي. قاعدة بيانات الرسوم البيانية مفتوحة المصدر TerminusDB مُنفذة بلغة برولوج. [ 28 ] صُممت TerminusDB لبناء وتنسيق الرسوم البيانية المعرفية بشكل تعاوني .
بناء الجملة والدلالات
في لغة برولوج، يُعبَّر عن منطق البرنامج باستخدام العلاقات، ويبدأ الحساب بتنفيذ استعلام على هذه العلاقات. تُنشأ العلاقات والاستعلامات باستخدام نوع البيانات الوحيد في برولوج، وهو المصطلح . [ 4 ] تُعرَّف العلاقات بواسطة العبارات . عند إعطاء استعلام، يحاول محرك برولوج إيجاد دحض منطقي للاستعلام المنفي. إذا أمكن دحض الاستعلام المنفي، أي إذا وُجدت صيغة لجميع المتغيرات الحرة تجعل اتحاد العبارات ومجموعة العناصر المفردة المكونة من الاستعلام المنفي خاطئة، فإن الاستعلام الأصلي، مع تطبيق الصيغة المُكتشفة، هو نتيجة منطقية للبرنامج. هذا يجعل برولوج (وغيرها من لغات البرمجة المنطقية) مفيدة بشكل خاص لقواعد البيانات، والرياضيات الرمزية ، وتطبيقات تحليل اللغة. ولأن برولوج تسمح بالمسندات غير النقية ، فقد يكون للتحقق من قيمة الصواب لبعض المسندات الخاصة تأثير جانبي مقصود ، مثل طباعة قيمة على الشاشة. لهذا السبب، يُسمح للمبرمج باستخدام قدرٍ من البرمجة الإجرائية التقليدية عندما يكون النموذج المنطقي غير ملائم. يحتوي على مجموعة فرعية منطقية بحتة، تُسمى "برولوج البحتة"، بالإضافة إلى عدد من الميزات غير المنطقية.
أنواع البيانات
نوع البيانات الوحيد في لغة برولوج هو المصطلح . المصطلحات إما ذرات ، أو أرقام ، أو متغيرات ، أو مصطلحات مركبة . [ ملاحظة 1 ]
- الذرة هي اسم رمزي يبدأ بحرف صغير أو يكون محاطًا بعلامات اقتباس. ومن أمثلة الذرات : و ، و ، و .
xred'Taco''some atom''p(a)' - يمكن أن تكون الأرقام أعدادًا عشرية أو أعدادًا صحيحة . تدعم معظم أنظمة برولوج الرئيسية أعدادًا صحيحة ذات طول عشوائي.
- تُرمز المتغيرات بسلسلة تتكون من حروف وأرقام وشرطة سفلية، وتبدأ بحرف كبير أو شرطة سفلية. تشبه المتغيرات في المنطق المتغيرات في كونها عناصر نائبة لمصطلحات عشوائية.
- يتكون الحد المركب من عنصر أساسي يُسمى "دالة" وعدد من "الوسائط"، وهي بدورها حدود. تُكتب الحدود المركبة عادةً على شكل دالة متبوعة بقائمة من الوسائط مفصولة بفواصل، ومُضمنة بين قوسين. يُسمى عدد الوسائط "معامل الحد" . يمكن اعتبار العنصر الأساسي حدًا مركبًا بمعامل صفر. مثال على الحد المركب هو
person_friends(zelda,[tom,jim]).
حالات خاصة من المصطلحات المركبة:
- القائمة هي مجموعة مرتبة من العناصر. ويُشار إليها بأقواس مربعة مع فصل العناصر بفواصل، أو في حالة القائمة الفارغة، بـ . على سبيل المثال ، أو .
[][1,2,3,4][red,green,blue] - السلاسل النصية : سلسلة من الأحرف محاطة بعلامات اقتباس تُعادل إما قائمة من رموز الأحرف (الرقمية)، أو قائمة من الأحرف (ذرات بطول 1)، أو ذرة، وذلك حسب قيمة علامة Prolog
double_quotes. على سبيل المثال،"to be, or not to be". [ 29 ]
القواعد والحقائق
تصف برامج برولوج العلاقات، المُعرَّفة بواسطة بنود. يقتصر استخدام برولوج الخالص على بنود هورن . يُستخدم نوعان من بنود هورن لتعريف برامج برولوج: القواعد والحقائق. تأخذ القاعدة الشكل التالي:
الرأس :- الجسم .وتُقرأ على النحو التالي: "يكون الرأس صحيحًا إذا كان الجسم صحيحًا". يتكون جسم القاعدة من استدعاءات للمسندات، والتي تُسمى أهداف القاعدة. يُشير عامل الربط المنطقي المدمج (أي عامل ذو,/2 معاملين باسم ) إلى ربط الأهداف، بينما يُشير إلى الفصل . لا يمكن أن يظهر الربط والفصل إلا في جسم القاعدة، وليس في رأسها.,;/2
تُسمى الجمل التي لا تحتوي على عبارات حقائق . ومن أمثلة الحقائق:
الإنسان ( سقراط ).وهو ما يعادل القاعدة التالية:
الإنسان ( سقراط ) :- صحيح .تكون المسندة المضمنة true/0صحيحة دائمًا.
وبناءً على الحقيقة المذكورة أعلاه، يمكن للمرء أن يسأل:
هل سقراط إنسان؟
؟- إنسان ( سقراط ). نعمما هي الأشياء التي تُعتبر بشرًا؟
؟- إنسان ( س ). س = سقراطتُسمى الجمل التي تحتوي على نصوص قواعد . مثال على القاعدة:
فانٍ ( X ) :- إنسان ( X ).ماذا لو أضفنا تلك القاعدة وسألنا ما هي الأشياء الفانية؟
؟- فانٍ ( س ). س = سقراطالمسندات والبرامج
المسند (أو تعريف الإجراء ) هو مجموعة من العبارات التي تتشابه رؤوسها في الاسم وعدد المعاملات. نستخدم الرمز " الاسم/عدد المعاملات" للإشارة إلى المسندات. البرنامج المنطقي هو مجموعة من المسندات. على سبيل المثال، يحتوي برنامج Prolog التالي، الذي يُعرّف بعض العلاقات العائلية، على أربعة مسندات:
mother_child ( trude , sally ).الأب والابن ( توم ، سالي ). الأب والابن ( توم ، إريكا ). الأب والابن ( مايك ، توم ).sibling ( X , Y ) :- parent_child ( Z , X ), parent_child ( Z , Y ), not ( X = Y ).parent_child ( X , Y ) :- father_child ( X , Y ). parent_child ( X , Y ) :- mother_child ( X , Y ).يحتوي المسند father_child/2على ثلاث عبارات، جميعها حقائق، ويحتوي المسند parent_child/2على عبارتين، وكلاهما قواعد.
نظرًا لطبيعة العلاقات التي تتسم بها العديد من الدوال المضمنة، يمكن استخدامها عادةً في عدة اتجاهات. على سبيل المثال، length/2يمكن استخدامها لتحديد طول قائمة ( ) length(List, L)، Listولإنشاء هيكل قائمة بطول معين ( length(X, 5))، ولإنشاء كل من هياكل القوائم وأطوالها معًا ( length(X, L)). وبالمثل، append/3يمكن استخدامها لإلحاق قائمتين ( append(ListA, ListB, X)) ListA، ListBولتقسيم قائمة معينة إلى أجزاء ( ). لهذا السبب، تكفي مجموعة صغيرة نسبيًا من دوال المكتبة للعديد من برامج برولوج append(X, Y, List).List
باعتبارها لغة برمجة عامة الأغراض، توفر لغة برولوج أيضًا العديد من الدوال المدمجة لتنفيذ مهام روتينية مثل الإدخال والإخراج ، واستخدام الرسومات، والتواصل مع نظام التشغيل. لا تحمل هذه الدوال أي دلالة علائقية، وإنما تقتصر فائدتها على الآثار الجانبية التي تُحدثها على النظام. على سبيل المثال، تقوم الدالة write/1بعرض مصطلح على الشاشة.
الحلقات والتكرار
يمكن تنفيذ الخوارزميات التكرارية باستخدام المسندات المتكررة . [ 30 ]
لنفترض parent_child/2الدالة المحددة في برنامج علاقة العائلة أعلاه. يحدد برنامج برولوج التالي علاقة السلف :
ancestor ( X , Y ) :- parent_child ( X , Y ). ancestor ( X , Y ) :- parent_child ( X , Z ), ancestor ( Z , Y ).يعبر هذا عن أن X هو سلف Y إذا كان X والد Y أو X والد سلف Y. وهو تكراري لأنه معرف من حيث نفسه (هناك استدعاء للمسند ancestor/2في جسم العبارة الثانية).
تنفيذ
يبدأ تنفيذ برنامج برولوج عندما يُدخل المستخدم هدفًا واحدًا يُسمى الاستعلام. منطقيًا، يحاول محرك برولوج إيجاد حلٍّ يُفند الاستعلام المنفي. تُسمى طريقة الحل المستخدمة في برولوج حل SLD . إذا أمكن دحض الاستعلام المنفي، فإن الاستعلام، مع ربط المتغيرات المناسب، يُعد نتيجة منطقية للبرنامج. في هذه الحالة، يتم إبلاغ المستخدم بجميع روابط المتغيرات المُولَّدة، ويُقال إن الاستعلام قد نجح. عمليًا، يمكن اعتبار استراتيجية تنفيذ برولوج تعميمًا لاستدعاءات الدوال في لغات البرمجة الأخرى، مع اختلاف واحد يتمثل في إمكانية مطابقة عدة رؤوس عبارات لاستدعاء مُحدد. في هذه الحالة، يُنشئ النظام نقطة اختيار، ويُوحِّد الهدف مع رأس عبارة البديل الأول، ثم يُتابع مع أهداف ذلك البديل الأول. إذا فشل أي هدف أثناء تنفيذ البرنامج، تُزال جميع ارتباطات المتغيرات التي أُجريت منذ إنشاء نقطة الاختيار الأخيرة، ويستمر التنفيذ مع البديل التالي لتلك النقطة. تُسمى استراتيجية التنفيذ هذه بالتراجع الزمني . على سبيل المثال، بالنظر إلى برنامج علاقات العائلة المُعرّف أعلاه، سيتم تقييم الاستعلام التالي على أنه صحيح:
؟- شقيق ( سالي ، إريكا ). نعميتم ذلك على النحو التالي: في البداية، يكون رأس العبارة الوحيد المطابق للاستعلام sibling(sally, erica)هو الأول، لذا فإن إثبات الاستعلام يُعادل إثبات جسم تلك العبارة مع وجود روابط المتغيرات المناسبة، أي العطف (parent_child(Z, sally), parent_child(Z, erica)). الهدف التالي الذي يجب إثباته هو الهدف الأيسر من هذا العطف، أي parent_child(Z, sally). يتطابق رأسا عبارتين مع هذا الهدف. يُنشئ النظام نقطة اختيار ويُجرّب البديل الأول، الذي جسمه هو father_child(Z, sally). يمكن إثبات هذا الهدف باستخدام الحقيقة father_child(tom, sally)، لذا يتم إنشاء الرابط Z = tom، والهدف التالي الذي يجب إثباته هو الجزء الثاني من العطف أعلاه: parent_child(tom, erica). مرة أخرى، يمكن إثبات هذا بواسطة الحقيقة المقابلة. بما أنه يمكن إثبات جميع الأهداف، ينجح الاستعلام. بما أن الاستعلام لا يحتوي على متغيرات، فلا يتم الإبلاغ عن أي روابط للمستخدم. استعلام يحتوي على متغيرات، مثل:
?- father_child ( Father , Child ).يسرد جميع الإجابات الصحيحة عند التراجع.
لاحظ أنه باستخدام الكود المذكور أعلاه، ?- sibling(sally, sally).ينجح الاستعلام أيضًا. ويمكن إضافة أهداف إضافية لوصف القيود ذات الصلة، إذا لزم الأمر.
النفي
\+/1تُتيح خاصية Prolog المُدمجة النفي كفشل ، مما يسمح بالاستدلال غير الرتيب . الهدف \+ illegal(X)في القاعدة
قانوني ( X ) :- \+ غير قانوني ( X ).يُقيّم هذا الاستثناء كما يلي: يحاول برولوج إثبات الهدف illegal(X). إذا وُجد برهان لهذا الهدف، \+ illegal(X)يفشل الهدف الأصلي (أي ). إذا لم يُعثر على برهان، ينجح الهدف الأصلي. لذلك، \+/1يُسمى عامل البادئة عامل "غير قابل للإثبات"، لأن الاستعلام ?- \+ Goal.ينجح إذا كان الهدف غير قابل للإثبات. يكون هذا النوع من النفي سليمًا إذا كانت وسيطته "أساسية" (أي لا تحتوي على متغيرات). يفقد الاستثناء سلامته إذا احتوت الوسيطة على متغيرات واكتملت عملية الإثبات. على وجه الخصوص، لا يمكن استخدام الاستعلام ?- legal(X).الآن لحصر جميع الأشياء المسموح بها.
البرمجة بلغة برولوج
في لغة برولوج، يُشار إلى تحميل الكود باسم "الاستشارة" . يمكن استخدام برولوج بشكل تفاعلي عن طريق إدخال الاستعلامات في موجه الأوامر ?-. إذا لم يكن هناك حل، تكتب برولوج "لا noيوجد حل". إذا كان هناك حل، فسيتم طباعته. إذا كانت هناك حلول متعددة للاستعلام، فيمكن طلبها بإدخال فاصلة منقوطة ;. توجد إرشادات حول ممارسات البرمجة الجيدة لتحسين كفاءة الكود وسهولة قراءته وصيانته. [ 31 ]
فيما يلي بعض الأمثلة على البرامج المكتوبة بلغة برولوج.
مرحبا بالعالم
مثال على استعلام أساسي في اثنين من لهجات لغة برولوج الشائعة:
| مقدمة SWI | مقدمة جنو |
|---|---|
?- اكتب ( 'Hello World!' ), nl . Hello World ! true .؟- | | ?- اكتب ( 'مرحباً بالعالم!' ), nl . مرحباً بالعالم !نعم | ؟- |
تُظهر هذه المقارنة أن الموجه ("?-" مقابل "| ?-") وحالة الحل ("صحيح". مقابل "نعم"، "خطأ". مقابل "لا") يمكن أن تختلف من تطبيق Prolog إلى آخر.
تحسين المُترجم
يمكن التعبير عن أي عملية حسابية بشكل تصريحي كسلسلة من انتقالات الحالة. على سبيل المثال، يمكن تنفيذ مُصرّف مُحسِّن بثلاث مراحل تحسين كعلاقة بين البرنامج الأولي وشكله المُحسَّن:
program_optimized ( Prog0 , Prog ) :- optimization_pass_1 ( Prog0 , Prog1 ), optimization_pass_2 ( Prog1 , Prog2 ), optimization_pass_3 ( Prog2 , Prog ).أو ما يعادل ذلك باستخدام تدوين DCG :
تم تحسين البرنامج --> optimization_pass_1 ، optimization_pass_2 ، optimization_pass_3 .فرز سريع
خوارزمية الفرز السريع ، التي تربط القائمة بنسختها المرتبة:
partition ([], _ , [], []). partition ([ X | Xs ], Pivot , Smalls , Bigs ) :- ( X @< Pivot -> Smalls = [ X | Rest ], partition ( Xs , Pivot , Rest , Bigs ) ; Bigs = [ X | Rest ], partition ( Xs , Pivot , Smalls , Rest ) ).quicksort ([]) --> []. quicksort ([ X | Xs ]) --> { partition ( Xs , X , Smaller , Bigger ) }, quicksort ( Smaller ), [ X ], quicksort ( Bigger ).أنماط التصميم في لغة برولوج
نمط التصميم هو حل عام قابل لإعادة الاستخدام لمشكلة شائعة في تصميم البرمجيات . من أنماط التصميم في لغة برولوج: الهياكل، والتقنيات، [ 32 ] [ 33 ] والعبارات المبتذلة، [ 34 ] ومخططات البرامج، [ 35 ] ومخططات وصف المنطق، [ 36 ] والبرمجة عالية المستوى . [ 37 ]
البرمجة عالية المستوى
الدالة المنطقية من الرتبة العليا هي دالة تأخذ دالة منطقية واحدة أو أكثر كوسائط. على الرغم من أن دعم البرمجة من الرتبة العليا يُخرج لغة برولوج من نطاق منطق الرتبة الأولى، الذي لا يسمح بالتكميم على الدوال المنطقية، [ 38 ] فإن معيار ISO Prolog يتضمن الآن بعض الدوال المنطقية المدمجة من الرتبة العليا مثل call/1` call/2f` و` call/3f` و` findall/3f` و` setof/3f` و` bagof/3f`. [ 39 ] علاوة على ذلك، بما أنه يمكن إنشاء أهداف برولوج وتقييمها بشكل عشوائي أثناء التشغيل، فمن السهل كتابة دوال منطقية من الرتبة العليا مثل `f` maplist/2، التي تُطبق دالة منطقية عشوائية على كل عنصر من عناصر قائمة معينة، و`f` sublist/3، التي تُصفّي العناصر التي تُحقق دالة منطقية معينة، مما يسمح أيضًا بتطبيق التخصيص الجزئي للدوال المنطقية . [ 37 ]
لتحويل الحلول من التمثيل الزمني (استبدال الإجابات عند التراجع) إلى التمثيل المكاني (المصطلحات)، يحتوي برولوج على العديد من الدوال التي تجمع جميع استبدالات الإجابات لاستعلام معين في قائمة. يمكن استخدام هذا في بناء القوائم . على سبيل المثال، الأعداد الكاملة تساوي مجموع قواسمها الحقيقية.
perfect ( N ) :- between ( 1 , inf , N ), U is N // 2 , findall ( D , ( between ( 1 , U , D ), N mod D =:= 0 ), Ds ), sumlist ( Ds , N ).يمكن استخدام هذا لحصر الأعداد الكاملة، وللتحقق مما إذا كان العدد كاملاً.
كمثال آخر، يقوم المسند maplistبتطبيق مسند Pعلى جميع المواضع المتناظرة في زوج من القوائم:
maplist ( _ , [], []). maplist ( P , [ X | Xs ], [ Y | Ys ]) :- call ( P , X , Y ), maplist ( P , Xs , Ys ).عندما Pيكون الشرط الذي يوحد جميع القيم بقيمة فريدة واحدة، Xيكون مكافئًا لتطبيق دالة الخريطة في البرمجة الوظيفية كـ .P(X,Y)Ymaplist(P, Xs, Ys)Ys = map(Function, Xs)
تم تطوير أسلوب البرمجة من الدرجة العليا في لغة برولوج في لغتي HiLog و λProlog .
الوحدات
لبرمجة الأنظمة الكبيرة ، توفر لغة برولوج نظام الوحدات ، وهو جزء من معيار ISO. [ 40 ] ومع ذلك، فبينما تدعم معظم أنظمة برولوج هيكلة الكود في وحدات، لا يلتزم أي تطبيق تقريبًا بجزء الوحدات في معيار ISO. وبدلًا من ذلك، قررت معظم أنظمة برولوج دعم نظام الوحدات Quintus / SICStus كمعيار فعلي للوحدات . ومع ذلك، فإن بعض التطبيقات فقط توفر مزيدًا من المسندات المريحة المتعلقة بالوحدات، وغالبًا ما تختلف دلالاتها اختلافًا طفيفًا. [ 41 ]
اختارت بعض الأنظمة تطبيق مفاهيم الوحدات البرمجية من خلال الترجمة من المصدر إلى المصدر إلى لغة برولوج ISO الأساسية، كما هو الحال في Logtalk . [ 23 ] انحرفت لغة برولوج GNU في البداية عن وحدات ISO البرمجية، واختارت بدلاً من ذلك البرمجة المنطقية السياقية ، حيث يمكن تحميل وتفريغ الوحدات البرمجية ديناميكيًا. [ 42 ] صممت Ciao نظام وحدات برمجية صارمًا، على الرغم من توافقه الأساسي مع المعيار الفعلي المستخدم في أنظمة برولوج الأخرى، إلا أنه قابل للتحليل الثابت الدقيق، ويدعم إخفاء المصطلحات، ويسهل البرمجة على نطاق واسع. [ 43 ] تتخذ XSB نهجًا مختلفًا، حيث تقدم نظام وحدات برمجية قائمًا على الذرات . [ 44 ] يسمح نظاما برولوج الأخيران بالتحكم في رؤية المصطلحات بالإضافة إلى رؤية المسندات. [ 41 ]
التحليل
توجد صيغة خاصة تُسمى قواعد الجملة المحددة . يتم توسيع القاعدة المُعرَّفة باستخدام -->/2بدلاً من :-/2بواسطة المعالج المسبق ( expand_term/2وهو آلية مشابهة للماكرو في لغات أخرى) وفقًا لبعض قواعد إعادة الكتابة البسيطة، مما ينتج عنه جمل برولوج عادية. والأهم من ذلك، أن إعادة الكتابة تُزوِّد المسند بوسيطين إضافيين، يمكن استخدامهما لربط الحالة ضمنيًا، على غرار المونادات في لغات أخرى. تُستخدم قواعد الجملة المحددة غالبًا لكتابة المحللات النحوية أو مولدات القوائم، لأنها توفر أيضًا واجهة ملائمة لقوائم الفرق.
المترجمات الفوقية والتأمل
لغة برولوج هي لغة متجانسة الرموز ، وتوفر العديد من الأدوات للبرمجة الانعكاسية (الانعكاس). تتيح استراتيجية التنفيذ الضمنية فيها كتابة مُقيِّم دائري فائق موجز (يُسمى أيضًا مُفسِّرًا فائقًا ) لرمز برولوج النقي.
حل ( صحيح ). حل (( الهدف الفرعي 1 ، الهدف الفرعي 2 )) :- حل ( الهدف الفرعي 1 )، حل ( الهدف الفرعي 2 ). حل ( الرأس ) :- العبارة ( الرأس ، الجسم )، حل ( الجسم ).حيث trueيمثل عطفًا فارغًا، clause(Head, Body)ويتحد مع العبارات في قاعدة البيانات من الشكل .Head :- Body
بما أن برامج برولوج هي في حد ذاتها سلاسل من مصطلحات برولوج ( حيث يمثل عاملًا:-/2 وسطيًا ) يسهل قراءتها وفحصها باستخدام آليات مدمجة (مثل )، فمن الممكن كتابة مترجمات مخصصة تُضيف إلى برولوج ميزات خاصة بمجال معين. على سبيل المثال، يقدم ستيرلنج وشابيرو مترجمًا فائقًا يُجري عمليات استدلال مع عدم اليقين، وقد أُعيد إنتاجه هنا مع تعديلات طفيفة: [ 45 ] : 330read/1
حل ( صحيح ، 1 ) :- !. حل (( الهدف الفرعي 1 ، الهدف الفرعي 2 )، اليقين ) :- !, حل ( الهدف الفرعي 1 ، اليقين 1 )، حل ( الهدف الفرعي 2 ، اليقين 2 )، اليقين هو الحد الأدنى ( اليقين 1 ، اليقين 2 ). حل ( الهدف ، 1 ) :- مدمج ( الهدف )، !, الهدف . حل ( الرأس ، اليقين ) :- مقارنة_بالبند ( الرأس ، الجسم ، اليقين 1 )، حل ( الجسم ، اليقين 2 )، اليقين هو اليقين 1 * اليقين 2 .يستخدم هذا المفسر جدولًا من المسندات المضمنة في لغة برولوج على النحو التالي : [ 45 ] : 327
builtin ( A is B ). builtin ( read ( X )). % إلخ.والعبارات الممثلة على النحو التالي clause_cf(Head, Body, Certainty). وبناءً على ذلك، يمكن استدعاؤها solve(Goal, Certainty)لتنفيذها Goalوالحصول على قدر من اليقين بشأن النتيجة.
اكتمال تورينج
تعتمد لغة برولوج النقية على مجموعة فرعية من منطق المسندات من الدرجة الأولى ، وهي بنود هورن ، التي تُعدّ كاملة تورينج . ويمكن إثبات اكتمال تورينج للغة برولوج باستخدامها لمحاكاة آلة تورينج.
turing ( Tape0 , Tape ) :- perform ( q0 , [], Ls , Tape0 , Rs ), reverse ( Ls , Ls1 ), append ( Ls1 , Rs , Tape ).نفّذ ( qf ، Ls ، Ls ، Rs ، Rs ) :- !. نفّذ ( Q0 ، Ls0 ، Ls ، Rs0 ، Rs ) :- رمز ( Rs0 ، Sym ، RsRest )، مرة واحدة ( قاعدة ( Q0 ، Sym ، Q1 ، NewSym ، Action ))، إجراء ( Action ، Ls0 ، Ls1 ، [ NewSym | RsRest ]، Rs1 )، نفّذ ( Q1 ، Ls1 ، Ls ، Rs1 ، Rs ).symbol ([], b , []). symbol ([ Sym | Rs ], Sym , Rs ).الإجراء ( يسار ، Ls0 ، Ls ، Rs0 ، Rs ) :- يسار ( Ls0 ، Ls ، Rs0 ، Rs ). الإجراء ( البقاء ، Ls ، Ls ، Rs ، Rs ). الإجراء ( يمين ، Ls0 ، [ Sym | Ls0 ]، [ Sym | Rs ]، Rs ).left ([], [], Rs0 , [ b | Rs0 ]). left ([ L | Ls ], Ls , Rs , [ L | Rs ]).يتم تحديد مثال بسيط لآلة تورينج من خلال الحقائق التالية:
القاعدة ( q0 ، 1 ، q0 ، 1 ، يمين ). القاعدة ( q0 ، b ، qf ، 1 ، ابقَ ).تقوم هذه الآلة بزيادة عدد ما بمقدار واحد في الترميز الأحادي: حيث تمر على أي عدد من الخلايا التي تحتوي على الرقم "1" وتضيف الرقم "1" في النهاية. مثال على الاستعلام والنتيجة:
?- turing ([ 1 , 1 , 1 ], Ts ). Ts = [ 1 , 1 , 1 , 1 ] ;يوضح هذا كيف يمكن التعبير عن أي عملية حسابية بشكل تصريحي كسلسلة من انتقالات الحالة، والتي يتم تنفيذها في لغة برولوج كعلاقة بين الحالات المتتالية ذات الأهمية.
تطبيق

مقدمة ISO
يتألف المعيار التقني للغة برولوج الصادر عن المنظمة الدولية للتوحيد القياسي (ISO) من جزأين. يهدف معيار ISO/IEC 13211-1، [ 39 ] [ 46 ] الصادر عام 1995، إلى توحيد الممارسات المتبعة في العديد من تطبيقات العناصر الأساسية للغة برولوج. وقد أوضح هذا المعيار جوانب من اللغة كانت غامضة سابقًا، مما أدى إلى إمكانية نقل البرامج. توجد ثلاثة تصحيحات: Cor.1:2007، [ 47 ] وCor.2:2012، [ 48 ] وCor.3:2017. [ 49 ] أما معيار ISO/IEC 13211-2، [ 39 ] الصادر عام 2000، فيضيف دعمًا للوحدات النمطية إلى المعيار. وتتولى مجموعة العمل ISO/IEC JTC1 / SC22 / WG17 [ 50 ] صيانة هذا المعيار . وتُعدّ ANSI X3J17 المجموعة الاستشارية التقنية الأمريكية لهذا المعيار. [ 51 ]
تجميع
لتحقيق الكفاءة، يُترجم كود برولوج عادةً إلى كود آلة مجرد، وغالبًا ما يتأثر بمجموعة تعليمات آلة وارن المجردة القائمة على المسجلات. [ 52 ] تستخدم بعض التطبيقات التفسير المجرد لاستخلاص معلومات النوع والوضع للمسندات في وقت الترجمة، أو تُترجم إلى كود آلة حقيقي لتحقيق أداء عالٍ. [ 53 ] يُعدّ ابتكار طرق تنفيذ فعّالة لكود برولوج مجالًا بحثيًا نشطًا في مجتمع برمجة المنطق، وتُستخدم طرق تنفيذ أخرى متنوعة في بعض التطبيقات. تشمل هذه الطرق تحويل العبارات إلى ثنائية والآلات الافتراضية القائمة على المكدس .
التكرار الذيل
تُطبّق أنظمة برولوج عادةً أسلوبًا معروفًا لتحسين الأداء يُسمى تحسين استدعاء الذيل ، وذلك للعبارات الشرطية الحتمية التي تُظهر استدعاءً ذيليًا، أو بشكل أعم، الاستدعاءات الذيلية: حيث يتم تجاهل إطار مكدس العبارة قبل تنفيذ الاستدعاء في موضع ذيلي. وبالتالي، تُنفّذ العبارات الشرطية الحتمية ذات الاستدعاء الذيلي بمساحة مكدس ثابتة، كما هو الحال في الحلقات في لغات البرمجة الأخرى.
فهرسة المصطلحات
يُعدّ إيجاد العبارات التي تتوافق مع مصطلح في استعلام عملية خطية بالنسبة لعدد العبارات. يستخدم فهرسة المصطلحات بنية بيانات تُمكّن من عمليات البحث في وقت أقل من الخطي . [ 54 ] لا تؤثر الفهرسة إلا على أداء البرنامج، ولا تؤثر على دلالاته. تستخدم معظم لغات برولوج الفهرسة على المصطلح الأول فقط، لأن الفهرسة على جميع المصطلحات مكلفة، ولكن التقنيات القائمة على الكلمات المشفرة في الحقول أو الكلمات المشفرة المتراكبة توفر فهرسة سريعة عبر الاستعلام الكامل ورأسه. [ 55 ] [ 56 ]
التجزئة
تُطبّق بعض أنظمة برولوج، مثل WIN-PROLOG وSWI-Prolog، تقنية التجزئة لتحسين كفاءة معالجة مجموعات البيانات الكبيرة. ويؤدي ذلك عادةً إلى تحسينات كبيرة في الأداء عند التعامل مع مجموعات بيانات ضخمة مثل WordNet .
عرض الجدول
تُطبّق بعض أنظمة برولوج (مثل B-Prolog و XSB و SWI-Prolog و YAP و Ciao ) طريقة تخزين مؤقت تُسمى "التخزين الجدولي "، مما يُغني المستخدم عن تخزين النتائج الوسيطة يدويًا. يُعدّ التخزين الجدولي مُوازنة بين المساحة والوقت ؛ إذ يُمكن تقليل وقت التنفيذ باستخدام مساحة أكبر لتخزين النتائج الوسيطة: [ 57 ] [ 58 ]
تُحفظ الأهداف الفرعية التي تتم مواجهتها في تقييم الاستعلام في جدول، إلى جانب إجابات هذه الأهداف الفرعية. إذا تمت مواجهة هدف فرعي مرة أخرى، يعيد التقييم استخدام المعلومات من الجدول بدلاً من إعادة تنفيذ عملية الحل على بنود البرنامج. [ 59 ]
يمكن توسيع نطاق الجدولة في اتجاهات متعددة. فهي تدعم الاستدلالات المتكررة من خلال حل SLG أو الجدولة الخطية. في نظام برولوج متعدد الخيوط، يمكن الاحتفاظ بنتائج الجدولة خاصة بخيط معين أو مشاركتها بين جميع الخيوط. وفي الجدولة التزايدية، قد تتفاعل الجدولة مع التغييرات.
التنفيذ في الأجهزة
خلال مشروع أنظمة حاسوب الجيل الخامس ، بُذلت محاولات لتطبيق لغة برولوج في الأجهزة بهدف تحقيق سرعة تنفيذ أعلى باستخدام بنى مخصصة. [ 60 ] [ 61 ] [ 62 ] علاوة على ذلك، تتمتع برولوج بعدد من الخصائص التي قد تسمح بتسريع التنفيذ من خلال التنفيذ المتوازي. [ 63 ] تمثلت إحدى المناهج الحديثة في تجميع برامج برولوج المحدودة إلى مصفوفة بوابات قابلة للبرمجة ميدانيًا . [ 64 ] مع ذلك، فقد تجاوز التقدم السريع في الأجهزة ذات الأغراض العامة باستمرار البنى الأكثر تخصصًا.
في عام 1982، كانت الحواسيب تعمل بسرعة تتراوح بين 10,000 و100,000 استدلال منطقي في الثانية (LIPS). وكانت مؤسسة FGCS تخطط لإنتاج حواسيب تعمل بسرعة تتراوح بين 0.1 و1 GLIPS. [ 65 ] وقدّرت وثائق معهد تكنولوجيا حواسيب الجيل الجديد أن استدلالًا منطقيًا واحدًا في الثانية (LIP) يتطلب حوالي 100 عملية على حاسوب تقليدي. وكانت الخطة هي إنتاج جهاز بنهاية المشروع (في عام 1992) مزود بـ 1000 معالج يحقق سرعة 1 GLIPS، مما يعني سرعة لا تقل عن مليون استدلال منطقي في الثانية (MLIPS) لكل معالج. [ 66 ]
قامت شركة سيجا بتطبيق لغة البرمجة برولوج لاستخدامها مع جهاز الكمبيوتر سيجا للذكاء الاصطناعي ، الذي تم إصداره للسوق اليابانية في عام 1986. تم استخدام برولوج لقراءة مدخلات اللغة الطبيعية ، باللغة اليابانية ، عبر لوحة اللمس . [ 67 ]
الإضافات
تم تطوير تطبيقات متنوعة من لغة برولوج لتوسيع قدرات البرمجة المنطقية في اتجاهات عديدة. وتشمل هذه التطبيقات الأنواع ، والأنماط، والبرمجة المنطقية المقيدة ، والبرمجة المنطقية الموجهة للكائنات ، والتزامن، والمنطق الخطي ، والبرمجة الوظيفية، وقدرات البرمجة المنطقية من الرتبة العليا ، بالإضافة إلى إمكانية التشغيل البيني مع قواعد المعرفة .
الأنواع
لغة برولوج هي لغة غير مصنفة. بدأت محاولات إدخال وتوسيع لغة برولوج باستخدام الأنواع في ثمانينيات القرن العشرين، [ 68 ] [ 69 ] واستمرت حتى عام 2008.[ 70 ] معلومات النوع مفيدة ليس فقط لسلامة النوع ولكن أيضًا للاستدلال حول برامج برولوج. [ 71 ]
الأوضاع
| محدد الوضع | تفسير |
|---|---|
+ | nonvarعند الدخول |
- | varعند الدخول |
? | غير محدد |
لا يُحدد بناء جملة لغة برولوج أي وسائط الدالة تُعتبر مدخلات وأيها تُعتبر مخرجات. [ 72 ] ومع ذلك، تُعد هذه المعلومة مهمة، ويُوصى بإدراجها في التعليقات. [ 73 ] توفر الأنماط معلومات قيّمة عند تحليل برامج برولوج [ 71 ] ، ويمكن استخدامها أيضًا لتسريع التنفيذ. [ 74 ]
قيود
تُوسّع برمجة منطق القيود لغة برولوج لتشمل مفاهيم من إرضاء القيود . [ 75 ] [ 76 ] يسمح برنامج منطق القيود بإضافة قيود في متن البنود، مثل: وهو مناسب لمشاكل التحسين التوافقي واسعة النطاق [ 77 ] ، وبالتالي فهو مفيد للتطبيقات في البيئات الصناعية، مثل الجدولة الزمنية الآلية وجدولة الإنتاج . تأتي معظم أنظمة برولوج مزودة بحلّ واحد على الأقل للقيود في المجالات المحدودة، وغالبًا ما تتضمن أيضًا حلولًا لمجالات أخرى مثل الأعداد النسبية .A(X,Y) :- X+Y>0.
التوجه الكائني
Flora-2 هو نظام تمثيل المعرفة والاستدلال الموجه للكائنات والمبني على منطق F ويتضمن HiLog ومنطق المعاملات والاستدلال القابل للتراجع .
Logtalk هي لغة برمجة منطقية كائنية التوجه، ويمكنها استخدام معظم تطبيقات Prolog كمترجم خلفي. وباعتبارها لغة متعددة الأنماط، فهي تدعم كلاً من النماذج الأولية والفئات.
Oblog هو امتداد صغير ومحمول وموجه للكائنات للغة Prolog من تطوير مارغريت ماكدوغال من EdCAAD، جامعة إدنبرة.
كانت لغة Objlog لغة قائمة على الإطارات تجمع بين الكائنات ولغة Prolog II من المركز الوطني للبحث العلمي (CNRS) في مرسيليا، فرنسا.
طُوِّرت لغة البرمجة Prolog++ بواسطة شركة Logic Programming Associates ، وأُصدرت لأول مرة عام 1989 لأجهزة الكمبيوتر الشخصية التي تعمل بنظام MS-DOS. أُضيفت لاحقًا إمكانية دعم منصات أخرى، وصدرت نسخة ثانية عام 1995. ونُشر كتاب عن Prolog++ من تأليف كريس موس بواسطة دار نشر Addison-Wesley عام 1994.
Visual Prolog هي لغة متعددة الأنماط مع واجهات وفئات وتطبيقات وتعبيرات كائنية.
الرسومات
أنظمة Prolog التي توفر مكتبة رسومية هي SWI-Prolog و [ 78 ] Visual Prolog و WIN-PROLOG و B-Prolog .
التزامن
Prolog-MPI هو امتداد مفتوح المصدر للغة SWI-Prolog للحوسبة الموزعة عبر واجهة تمرير الرسائل . [ 79 ] كما توجد لغات برمجة Prolog متزامنة متعددة. [ 80 ]
برمجة الويب
تدعم بعض تطبيقات لغة برولوج، ولا سيما فيجوال برولوج و SWI-Prolog و Ciao ، برمجة الويب من جانب الخادم مع دعم بروتوكولات الويب و HTML و XML . [ 81 ] كما توجد امتدادات لدعم تنسيقات الويب الدلالي مثل إطار وصف الموارد ولغة الأنطولوجيا على الويب . [ 82 ] [ 83 ] وقد اقتُرحت برولوج أيضًا كلغة برمجة من جانب العميل . [ 84 ] بالإضافة إلى ذلك، يدعم فيجوال برولوج JSON-RPC و Websockets .
آخر
- تُوسّع لغة F-log لغة Prolog باستخدام الإطارات/الكائنات لتمثيل المعرفة .
- تُوسّع لغة منطق المعاملات لغة برولوج بنظرية منطقية لعوامل تحديث تغيير الحالة. وهي تمتلك دلالات نموذجية وإجرائية.
- تم إنشاء OW Prolog لمعالجة افتقار لغة Prolog للرسومات والواجهة.
واجهات للغات أخرى
توجد أطر عمل يمكنها الربط بين لغة برولوج واللغات الأخرى:
- يُتيح خادم LPA Intelligence Server تضمين LPA Prolog لنظام التشغيل Windows في لغات برمجة أخرى، بما في ذلك: C و C++ و C# و Java و Visual Basic و Delphi و . NET و Lua و Python وغيرها. وهو يستغل نوع بيانات السلسلة النصية المخصص الذي توفره لغة LPA Prolog.
- تتيح واجهة برمجة تطبيقات خادم المنطق ( API ) إمكانية توسيع وتضمين لغة برولوج في لغات C و C++ و Java و Visual Basic و Delphi و .NET ، وأي لغة أو بيئة أخرى تدعم استدعاء ملفات .dll أو .so. وهي مُطبقة حاليًا على Amzi! Prolog + Logic Server، ولكن يمكن توفير مواصفات واجهة برمجة التطبيقات لأي تطبيق آخر.
- JPL عبارة عن جسر ثنائي الاتجاه بين Java و Prolog، يأتي مُدمجًا مع SWI-Prolog افتراضيًا، مما يسمح لـ Java و Prolog باستدعاء بعضهما البعض (بشكل متكرر). وهو معروف بدعمه الجيد للتزامن، ويخضع لتطوير مستمر.
- InterProlog، مكتبة برمجية تربط بين Java و Prolog، وتُتيح استدعاء الدوال/الأساليب ثنائي الاتجاه بين اللغتين. يمكن ربط كائنات Java بمصطلحات Prolog والعكس صحيح. تُمكّن من تطوير واجهات المستخدم الرسومية ووظائف أخرى في Java مع إبقاء معالجة المنطق في طبقة Prolog. تدعم XSB و SWI-Prolog .
- توفر بروفا تكاملاً أصلياً لبنية لغة جافا، بالإضافة إلى ميزات مراسلة الوكلاء وقواعد التفاعل. وتُصنف بروفا نفسها كنظام برمجة نصية قائم على القواعد (RBS) للبرمجيات الوسيطة. وتُعدّ هذه اللغة رائدة في الجمع بين البرمجة الإجرائية والبرمجة التصريحية .
- PROL: محرك Prolog قابل للتضمين في Java. يتضمن بيئة تطوير متكاملة صغيرة وبعض المكتبات.
- GNU Prolog for Java هو تطبيق لـ ISO Prolog كمكتبة Java (gnu.prolog).
- يوفر Ciao واجهات للغات C و C++ و Java وقواعد البيانات العلائقية.
- C#-Prolog هو مترجم لغة Prolog مكتوب بلغة C# (المدارة). يمكن دمجه بسهولة في برامج C#. يتميز بكونه مترجمًا موثوقًا وسريعًا نسبيًا، وواجهة سطر أوامر، وواجهة ويندوز، وقواعد نحوية موزعة مدمجة، وشروط XML، وشروط SQL، وقابل للتوسيع. يتوفر الكود المصدري الكامل، بما في ذلك مولد محلل نحوي يمكن استخدامه لإضافة ملحقات خاصة.
- tuProlog هو نظام برولوج خفيف الوزن للتطبيقات والبنى التحتية الموزعة، مصمم خصيصًا حول نواة أساسية بسيطة، يمكن تهيئتها بشكل ثابت أو ديناميكي عن طريق تحميل/تفريغ مكتبات الدوال الشرطية. يدعم tuProlog البرمجة متعددة الأنماط بشكل أصلي، موفرًا نموذج تكامل سلسًا وواضحًا بين برولوج ولغات البرمجة الكائنية الشائعة، وتحديدًا جافا (لإصدار tuProlog Java)، وأي لغة مبنية على .NET (مثل C# وF#) (لإصدار tuProlog .NET).
- Janus عبارة عن واجهة ثنائية الاتجاه بين لغتي Prolog و Python باستخدام أدوات أساسية منخفضة المستوى قابلة للنقل. تم تطويرها في البداية لـ XSB بواسطة Anderson و Swift، [ 85 ] ولكن تم اعتمادها كمبادرة مشتركة من قبل فرق XSB و Ciao و SWI-Prolog.
انظر أيضاً
- مقارنة تطبيقات لغة برولوج
- النمذجة المنطقية اللغوية . طريقة لبناء نظام قائم على المعرفة باستخدام لغة برولوج.
- برمجة مجموعات الإجابات . منهج تصريحي بالكامل لبرمجة المنطق.
- رابطة البرمجة المنطقية
اللغات ذات الصلة
- لغة غودل هي تطبيق قوي لبرمجة المنطق المقيد المتزامن . وهي مبنية على لغة SICStus Prolog .
- لغة فيجوال برولوج ، التي كانت تُعرف سابقًا باسمي PDC Prolog و Turbo Prolog، هي لهجة من لغة برولوج ذات كتابة قوية وموجهة للكائنات ، وتختلف اختلافًا كبيرًا عن لغة برولوج القياسية. وقد سوّقتها شركة بورلاند تحت اسم Turbo Prolog، ولكنها الآن تُطوّر وتُسوّق من قِبل شركة Prolog Development Center (PDC) الدنماركية التي أنتجتها في الأصل.
- لغة داتالوج هي مجموعة فرعية من لغة برولوج. وهي تقتصر على العلاقات التي يمكن تصنيفها ولا تسمح بالمصطلحات المركبة. وعلى عكس برولوج، فإن داتالوج ليست لغة كاملة تورينج .
- ميركوري هو فرع من لغة برولوج موجه نحو هندسة البرمجيات على نطاق واسع مع نظام نوع ثابت ومتعدد الأشكال، بالإضافة إلى نظام نمط وحتمية.
- GraphTalk هو تطبيق خاص لآلة وارن المجردة، مع خصائص إضافية موجهة للكائنات.
- من بعض النواحي، تُعتبر لغة برولوج جزءًا من لغة بلانر . وقد تم تطوير الأفكار الواردة في بلانر لاحقًا في استعارة المجتمع العلمي .
- AgentSpeak هو نوع من أنواع لغة Prolog لبرمجة سلوك الوكلاء في أنظمة متعددة الوكلاء .
- بدأت لغة إرلانج حياتها بتنفيذ قائم على لغة برولوج، وتحافظ على الكثير من بناء الجملة القائم على التوحيد في لغة برولوج.
- Pilog هي لغة تصريحية مبنية على لغة PicoLisp ، ولها دلالات لغة Prolog، ولكنها تستخدم بناء جملة لغة Lisp.
- λProlog هو امتداد لـ Prolog الأساسي يتميز بالكتابة متعددة الأشكال والبرمجة المعيارية والبرمجة من الدرجة العليا، بما في ذلك الدعم المباشر للمصطلحات ذات عوامل ربط المتغيرات من خلال ما يسمى بصيغة شجرة λ وتوحيد الأنماط من الدرجة العليا.
ملحوظات
- ↑ تختلف مصطلحات لغة برولوج عن مصطلحات المنطق . فمصطلح برولوج هو (بحسب السياق) مصطلح أو صيغة منطقية أساسية. أما الذرة في مصطلحات المنطق القياسية فتعني صيغة منطقية أساسية ؛ بينما الذرة في برولوج (بحسب السياق) هي ثابت أو رمز دالة أو رمز مسند منطقي.
مراجع
- ^ كلوكسين، ويليام ف. ميليش، كريستوفر س. (2003). البرمجة في برولوج . برلين؛ نيويورك: سبرينغر-فيرلاغ. رقم ISBN 978-3-540-00678-7.
- ↑ براتكو، إيفان (2012). برمجة برولوج للذكاء الاصطناعي ( الطبعة الرابعة). هارلو، إنجلترا؛ نيويورك: أديسون ويسلي. ISBN 978-0-321-41746-6.
- ↑ كوفينجتون، مايكل أ. (1994). معالجة اللغة الطبيعية لمبرمجي برولوج . إنجلوود كليفس، نيوجيرسي: برنتيس هول. ISBN 978-0-13-629213-5.
- 1 2 لويد، جيه دبليو (1984). أسس البرمجة المنطقية . برلين: سبرينغر-فيرلاغ. ISBN 978-3-540-13299-8.
- ↑ انظر برمجة المنطق § التاريخ .
- ↑ ستيكل، م. إي. (1988). "مُثبت نظريات تقنية برولوج: تنفيذه بواسطة مُترجم برولوج مُوسّع" . مجلة الاستدلال الآلي . 4 (4): 353-380 . CiteSeerX 10.1.1.47.3057 . doi : 10.1007/BF00297245 . S2CID 14621218 .
- ↑ ميريت، دينيس (1989). بناء أنظمة الخبراء في لغة برولوج . برلين: سبرينغر-فيرلاغ. ISBN 978-0-387-97016-5.
- ↑ فيلتي، آمي. "نهج البرمجة المنطقية لتنفيذ إعادة كتابة المصطلحات من الرتبة العليا." امتدادات البرمجة المنطقية (1992): 135-161.
- ↑ كينت د. لي (19 يناير 2015). أسس لغات البرمجة . سبرينغر. ص 298–. ISBN 978-3-319-13314-0.
- ↑ أوتي شميد (21 أغسطس 2003). التركيب الاستقرائي للبرامج الوظيفية: التخطيط الشامل، وطي البرامج المحدودة، وتجريد المخططات عن طريق الاستدلال القياسي . سبرينغر ساينس آند بيزنس ميديا. ISBN 978-3-540-40174-2.
- 1 2 3 آدم لالي؛ بول فودور (31 مارس 2011). "معالجة اللغة الطبيعية باستخدام برولوج في نظام آي بي إم واتسون" . جمعية برمجة المنطق. مؤرشف من الأصل في 3 سبتمبر 2014. تم الاطلاع عليه في 13 يونيو 2014 .انظر أيضًا واتسون (الحاسوب) .
- ↑ "الإجابة على الأسئلة: من التقسيمات إلى لغة برولوج" .
- ↑ "NLProlog: Reasoning with Weak Unification for Question Answering in Natural Language" (PDF) .
- ↑ فرناندو سي إن بيريرا ؛ ستيوارت إم شيبر (2005). برولوج وتحليل اللغة الطبيعية . ميكروتوم.
- ↑ كولميراور، أ. وروسيل، ب.، 1996. ميلاد برولوج. في تاريخ لغات البرمجة - الجزء الثاني (ص 331-367).
- ↑ كوالسكي، ر. أ. (1988). "السنوات الأولى لبرمجة المنطق" (ملف PDF) . اتصالات رابطة مكائن الحوسبة . 31 : 38. doi : 10.1145/35043.35046 . S2CID 12259230 .
- ↑ كولميراور، أ.؛ روسيل، ب. (1993). "ميلاد لغة برولوج" (ملف PDF) . نشرة ACM SIGPLAN . 28 (3): 37. doi : 10.1145/155360.155362 .
- ↑ "مقدمة: تاريخ موجز" . تم الاطلاع عليه بتاريخ 21 نوفمبر 2021 .
- ↑ باونتين، ديك (أكتوبر 1984). "بوب أند سناب" . بايت . ص 381. تم الاطلاع عليه بتاريخ 23 أكتوبر 2013 .
- ↑ "علوم الحاسوب - لغات البرمجة، بناء الجملة، الخوارزميات | بريتانيكا" . www.britannica.com . تاريخ الاسترجاع: 12 يوليو 2023 .
- 1 2 البرمجة المنطقية للعالم الحقيقي. زولتان سوموجي، فيرغوس هندرسون، توماس كونواي، ريتشارد أوكيف. وقائع ورشة عمل ما بعد مؤتمر ILPS'95 حول رؤى مستقبل البرمجة المنطقية.
- ↑ "الأسئلة الشائعة: دليل موارد برولوج 1/2 [ منشور شهري ] القسم - [ 1-8 ] قاعدة بيانات برولوج 1000" . Faqs.org .
- 1 2 مورا، باولو (أغسطس 2004)، "Logtalk" ، جمعية برمجة المنطق ، 17 (3)، مؤرشف من الأصل في 12-04-2010 ، تم استرجاعه في 16-02-2010
- ↑ جان ويليماكر وفيتور سانتوس كوستا: قابلية نقل برامج برولوج: النظرية ودراسات الحالة . ورشة عمل CICLOPS-WLPE 2010. مؤرشفة بتاريخ 16-07-2010 في Wayback Machine .
- 1 2 كيسليوف، أوليغ؛ كامياما، يوكيوشي (2014). إعادة التفكير في لغة برولوج . وقائع الاجتماع الحادي والثلاثين للجمعية اليابانية لعلوم وتكنولوجيا البرمجيات.
- ↑ فرانزن، توركيل (1994)، "التصريحي مقابل الإجرائي" ، رابطة برمجة المنطق ، 7 (3)
- ↑ دانتسين، يفغيني؛ إيتر، توماس؛ غوتلوب، جورج؛ فورونكوف، أندريه (2001). "تعقيد وقوة التعبير في البرمجة المنطقية" . مجلة ACM Computing Surveys . 33 (3): 374–425 . CiteSeerX 10.1.1.616.6372 . doi : 10.1145/502807.502810 . S2CID 518049 .
- ↑ terminusdb/terminusdb ، TerminusDB، 13 ديسمبر 2020 ، تاريخ الاسترجاع 15 ديسمبر 2020
- ↑ ISO/IEC 13211-1:1995 مقدمة، 6.3.7 المصطلحات - تدوين القائمة بعلامات اقتباس مزدوجة. المنظمة الدولية للتوحيد القياسي ، جنيف.
- ↑ كارلسون، ماتس (27 مايو 2014). دليل مستخدم SICStus Prolog 4.3: وثائق مرجعية أساسية . BoD – كتب عند الطلب. ISBN 978-3-7357-3744-1– عبر كتب جوجل.
- ↑ كوفينجتون، مايكل أ.؛ باجنارا، روبرتو؛ أوكيف، ريتشارد أ .؛ ويليماكر، جان؛ برايس، سيمون (2011). "إرشادات البرمجة للغة برولوج". نظرية وممارسة البرمجة المنطقية . 12 (6): 889-927 . arXiv : 0911.2899 . doi : 10.1017/S1471068411000391 . S2CID 438363 .
- ↑ كيرشنباوم، م.؛ ستيرلينغ، ل. س. (1993). "تطبيق التقنيات على الهياكل". في جاكيه، ج. م. ج. (محرر). بناء البرامج المنطقية . وايلي للحوسبة الاحترافية. جون وايلي وأولاده. ص 127-140 . CiteSeerX 10.1.1.56.7278 . ISBN 978-0-471-93789-0.
- ↑ ستيرلينغ، ليون (2002). المنطق الحسابي: البرمجة المنطقية وما بعدها . المجلد 2407. الصفحات 17-26 . doi : 10.1007/3-540-45628-7_15 . ISBN 978-3-540-43959-2.
- ↑ د. باركر-بلامر. البرمجة المبتذلة في برولوج. في م. بروينوغ، محرر، وقائع ورشة العمل الثانية حول البرمجة الفوقية في المنطق، الصفحات 247-256. قسم علوم الحاسوب، الجامعة الكاثوليكية في لوفين، 1990.
- ↑ جيج-هاريسون، تي إس (1995). تمثيل مخططات البرامج المنطقية في برولوج . وقائع المؤتمر الدولي الثاني عشر حول البرمجة المنطقية. ص 467-481 .
- ↑ ديفيل، إيف (1990). البرمجة المنطقية: تطوير البرامج المنهجي . ووكينغهام، إنجلترا: أديسون-ويسلي. ISBN 978-0-201-17576-9.
- 1 2 نايش، لي (1996). برمجة المنطق من الرتبة العليا في لغة برولوج (تقرير). قسم علوم الحاسوب، جامعة ملبورن . CiteSeerX 10.1.1.35.4505 .
- ↑ "فيما يتعلق بمتغيرات لغة برولوج، فإن المتغيرات الموجودة في رأس البرنامج فقط هي التي تُقاس كميًا بشكل ضمني شامل، بينما تُقاس تلك الموجودة في جسم البرنامج فقط كميًا بشكل ضمني وجودي" . تم الاطلاع عليه بتاريخ 4 مايو 2013 .
- 1 2 3 ISO/IEC 13211: تكنولوجيا المعلومات – لغات البرمجة – برولوج. المنظمة الدولية للتوحيد القياسي ، جنيف.
- ↑ ISO/IEC 13211-2: الوحدات النمطية.
- 1 2 فيليب كورنر؛ مايكل لوشيل؛ جواو باربوسا؛ فيتور سانتوس كوستا؛ فيرونيكا دال؛ مانويل ف. هيرمينجيلدو؛ خوسيه إف موراليس؛ جان ويليماكر؛ دانيال دياز؛ سلفادور أبرو؛ جيوفاني سياتو (نوفمبر 2022)، “خمسون عامًا من البرولوج وما بعده”، نظرية وممارسة البرمجة المنطقية ، 22 (6): 776–858 ، دوى : 10.1017 / S1471068422000102 ، hdl : 10174/33387
- ↑ أبريو، سلفادور؛ نوغيرا، فيتور (2006). "استخدام لغة برمجة منطقية مع الاستمرارية والسياقات". البرمجة التصريحية لإدارة المعرفة . سلسلة محاضرات في علوم الحاسوب. المجلد 4369. الصفحات 38-47 . doi : 10.1007/11963578_4 . ISBN 978-3-540-69233-1.
- ↑ كابيزا، دانيال؛ هيرمينجيلدو، مانويل (2000). "نظام وحدات جديد للغة برولوج". المنطق الحسابي - CL 2000. سلسلة محاضرات في علوم الحاسوب. المجلد 1861. الصفحات 131-148 . doi : 10.1007/3-540-44957-4_9 . ISBN 978-3-540-67797-0.
- ↑ ساغوناس، كونستانتينوس؛ سويفت، تيرانس؛ وارين، ديفيد س. (1994). "XSB كمحرك قاعدة بيانات استنتاجي فعال" . سجل ACM SIGMOD . 23 (2): 442-453 . doi : 10.1145/191843.191927 .
- 1 2 شابيرو، إيهود ي.؛ ستيرلينغ، ليون (1994). فن البرولوج: تقنيات برمجة متقدمة . كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-19338-2.
- ^ إد الدبالي، أ. ديرانسارت، بيير؛ سيرفوني، L. (1996). Prolog: المعيار: دليل مرجعي . برلين: سبرينغر. رقم ISBN 978-3-540-59304-1.
- ↑ "ISO/IEC 13211-1:1995/Cor 1:2007" . ISO .
- ↑ "ISO/IEC 13211-1:1995/Cor 2:2012" . ISO .
- ↑ "ISO/IEC 13211-1:1995/Cor 3:2017" . ISO .
- ↑ "ISO/IEC JTC1 SC22 WG17" .
- ↑ "X3J17 ومعيار برولوج" . مؤرشف من الأصل بتاريخ 23 أغسطس 2009. تم الاطلاع عليه بتاريخ 2 أكتوبر 2009 .
- ↑ ديفيد إتش دي وارين. "مجموعة تعليمات برولوج مجردة" . مذكرة فنية رقم 309، معهد ستانفورد للأبحاث الدولي ، مينلو بارك، كاليفورنيا، أكتوبر 1983.
- ↑ فان روي، ب.؛ ديسبين، أ.م. (1992). "برمجة منطقية عالية الأداء باستخدام مُصرّف برولوج أكواريوس". مجلة الكمبيوتر . 25 : 54-68 . doi : 10.1109/2.108055 . S2CID 16447071 .
- ↑ غراف، بيتر (1995). فهرسة المصطلحات . سبرينغر. ISBN 978-3-540-61040-3.
- ↑ وايز، مايكل جيه؛ باورز، ديفيد إم دبليو (1986). فهرسة عبارات برولوج عبر كلمات الترميز المتراكبة والكلمات المشفرة في الحقول . الندوة الدولية حول البرمجة المنطقية . الصفحات 203-210 .
- ↑ كولومب، روبرت م. (1991). "تحسين التوحيد في لغة برولوج من خلال فهرسة العبارات". مجلة البرمجة المنطقية . 10 : 23-44 . doi : 10.1016/0743-1066(91)90004-9 .
- ↑ سويفت، ت. (1999). "الجدولة للبرمجة غير الرتيبة". حوليات الرياضيات والذكاء الاصطناعي . 25 (3/4): 201-240 . doi : 10.1023/A:1018990308362 . S2CID 16695800 .
- ↑ تشو، نينغ-فا؛ ساتو، تايسوكي (2003). "حساب النقطة الثابتة الفعال في الجدولة الخطية" (ملف PDF) . وقائع المؤتمر الدولي الخامس لجمعية ACM SIGPLAN حول مبادئ وممارسات البرمجة التصريحية : 275-283 .
- ↑ سويفت، ت.؛ وارين، د.س. (2011). "XSB: توسيع لغة برولوج باستخدام البرمجة المنطقية الجدولية". نظرية وممارسة البرمجة المنطقية . 12 ( 1-2 ): 157-187 . arXiv : 1012.5123 . doi : 10.1017/S1471068411000500 . S2CID 6153112 .
- ↑ آبي، س.؛ باندوه، ت.؛ ياماغوتشي، س.؛ كوروساوا، ك.؛ كيرياما، ك. (1987). "معالج برولوج متكامل عالي الأداء IPP". وقائع الندوة الدولية السنوية الرابعة عشرة حول هندسة الحاسوب - ISCA '87 . ص 100. doi : 10.1145/30350.30362 . ISBN 978-0-8186-0776-9. S2CID 10283148 .
- ↑ روبنسون، إيان (1986). معالج برولوج قائم على جهاز ذاكرة لمطابقة الأنماط . المؤتمر الدولي الثالث حول البرمجة المنطقية. سلسلة محاضرات في علوم الحاسوب. المجلد 225. سبرينغر. الصفحات 172-179 . doi : 10.1007/3-540-16492-8_73 . ISBN 978-3-540-16492-0.
- ↑ تاكي، ك.؛ ناكاجيما، ك.؛ ناكاشيما، هـ.؛ إيكيدا، م. (1987). "تقييم أداء وبنية جهاز PSI" . إشعارات ACM SIGPLAN . 22 (10): 128. doi : 10.1145/36205.36195 .
- ↑ غوبتا، جي.؛ بونتيلي، إي.؛ علي، ك. أ. م.؛ كارلسون، م.؛ هيرمينجيلدو، م. ف. (2001). "التنفيذ المتوازي لبرامج برولوج: دراسة استقصائية" . معاملات ACM في لغات البرمجة والأنظمة . 23 (4): 472. doi : 10.1145/504083.504085 . S2CID 2978041 .
- ↑ "الأنظمة المخصصة بشكل ثابت" .
- ↑ برامر، م.أ.؛ برامر، دون (1984). الجيل الخامس: ببليوغرافيا مشروحة . ووكينغهام، إنجلترا؛ ريدينغ، ماساتشوستس: أديسون-ويسلي. ص 6. ISBN 978-0-201-14427-7.
- ↑ فيجنباوم، إدوارد؛ شروب، هوارد (1993-07-01). "المشروع الوطني الياباني للجيل الخامس: مقدمة، ودراسة استقصائية، وتقييم" . أنظمة حاسوب الجيل القادم . مؤتمر FGCS. 9 (2): 105-117 . doi : 10.1016/0167-739X(93)90003-8 . ISSN 0167-739X .
- ↑ "برنامج يأخذ الألعاب على محمل الجد" . مجلة نيو ساينتست . ريد بزنس إنفورميشن . 26 مارس 1987. ص 34 – عبر كتب جوجل .
- ↑ مايكروفت، أ.؛ أوكيف، ر. أ. (1984). "نظام أنواع متعدد الأشكال للغة برولوج" . الذكاء الاصطناعي . 23 (3): 295. doi : 10.1016/0004-3702(84)90017-1 .
- ^ بفينينج ، فرانك (1992). أنواع في البرمجة المنطقية . كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا. رقم ISBN 978-0-262-16131-2.
- ^ شريفيرس، توم؛ سانتوس كوستا، فيتور؛ ويليميكر، يناير؛ ديموين، بارت (2008). "نحو Prolog مكتوب" . في ماريا غارسيا دي لا باندا ؛ إنريكو بونتيللي (محرران). البرمجة المنطقية: المؤتمر الدولي الرابع والعشرون، ICLP 2008، أوديني، إيطاليا، 9-13 ديسمبر 2008: الإجراءات . ملاحظات محاضرة في علوم الكمبيوتر. المجلد. 5366. ص 693 – 697. دوى : 10.1007 / 978-3-540-89982-2_59 . رقم ISBN 978-3-540-89982-2.
- 1 2 Apt, KR; Marchiori, E. (1994). "الاستدلال حول برامج برولوج: من الأنماط إلى الأنواع إلى التأكيدات" . الجوانب الرسمية للحوسبة . 6 (ملحق 1): 743. CiteSeerX 10.1.1.57.395 . doi : 10.1007/BF01213601 . S2CID 12235465 .
- ↑ أوكيف، ريتشارد أ. (1990). فن كتابة برولوج . كامبريدج، ماساتشوستس: مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0-262-15039-2.
- ↑ كوفينجتون، مايكل؛ باجنارا، روبرتو؛ وآخرون (2010). "إرشادات البرمجة لبرولوج". arXiv : 0911.2899 [ cs.PL ].
- ↑ روي، ب.؛ ديموين، ب.؛ ويليمز، ي. د. (1987). " تحسين سرعة تنفيذ لغة برولوج المُجمَّعة باستخدام الأنماط، واختيار العبارات، والحتمية" . تابسوفت 87. سلسلة محاضرات في علوم الحاسوب. المجلد 250. ص 111. doi : 10.1007/BFb0014976 . ISBN 978-3-540-17611-4.
- ↑ جعفر، ج. (1994). "برمجة المنطق المقيد: دراسة استقصائية" . مجلة برمجة المنطق . 19-20 : 503-581 . doi : 10.1016/0743-1066(94)90033-7 .
- ↑ كولميراور، آلان (1987). "فتح عالم برولوج 3". بايت . أغسطس.
- ↑ والاس، م. (2002). "برمجة المنطق المقيد". المنطق الحسابي: برمجة المنطق وما بعدها . سلسلة محاضرات في علوم الحاسوب. المجلد 2407. الصفحات 512-556 . doi : 10.1007/3-540-45628-7_19 . ISBN 978-3-540-45628-5.
- ↑ "XPCE: مكتبة واجهة المستخدم الرسومية الأصلية لـ SWI-Prolog" . swi-prolog.org .
- ↑ "prolog-mpi" . Apps.lumii.lv . تم الاطلاع عليه بتاريخ 16-09-2010 .
- ↑ إيهود شابيرو. عائلة لغات البرمجة المنطقية المتزامنة. مجلة ACM Computing Surveys . سبتمبر 1989.
- ↑ ويليماكر، ج.؛ هوانغ، ز.؛ فان دير ميج، ل. (2008). "SWI-Prolog والويب" (ملف PDF) . نظرية وممارسة البرمجة المنطقية . 8 (3): 363. doi : 10.1017/S1471068407003237 . S2CID 5404048 .
- ↑ ويلماكر، يان؛ هيلدبراند، ميشيل؛ فان أوسنبروجن، جاكو (2007)، هيمانز، س.؛ بوليريس، أ.؛ روكهاوس، إ.؛ بيرس، د.؛ غوبتا، ج. (محررون)، "استخدام {برولوج} كأساس للتطبيقات على الويب الدلالي" (ملف PDF) ، وقائع ورشة العمل الثانية حول تطبيقات البرمجة المنطقية على الويب، والويب الدلالي، وخدمات الويب الدلالي ، وقائع ورش عمل CEUR، المجلد 287، بورتو، البرتغال: CEUR-WS.org، الصفحات 84-98
- ↑ معالجة أنطولوجيات OWL2 باستخدام Thea: تطبيق لبرمجة المنطق . فانجيليس فاسيلياديس، جان ويليماكر، وكريس مونغال. وقائع ورشة العمل الدولية الخامسة حول OWL: التجارب والاتجاهات (OWLED 2009)، شانتيلي، فرجينيا، الولايات المتحدة، 23-24 أكتوبر 2009
- ↑ لوك، إس دبليو؛ دافيسون، أ. (2001). "شفرة جوالة آمنة قائمة على لغة برولوج". نظرية وممارسة البرمجة المنطقية . 1 (3): 321. arXiv : cs/0406012 . CiteSeerX 10.1.1.58.6610 . doi : 10.1017/S1471068401001211 . S2CID 11754347 .
- ↑ أندرسن، سي. وسويفت، تي.، 2023. نظام جانوس: جسر نحو تطبيقات برولوج جديدة. في برولوج: الخمسون عامًا القادمة (ص 93-104). تشام: سبرينغر نيتشر سويسرا.
للمزيد من القراءة
- بلاكبيرن، باتريك؛ بوس، يوهان؛ ستريغنيتز، كريستينا (2006). تعلم لغة برولوج الآن! منشورات الكلية. ISBN 978-1-904987-17-8أُرشف من المصدر الأصلي بتاريخ 26 أغسطس 2007. تم الاطلاع عليه بتاريخ 2 ديسمبر 2008 .
- إيفان براتكو ، برمجة برولوج للذكاء الاصطناعي ، الطبعة الرابعة، 2012، رقم ISBN 978-0-321-41746-6ملحقات الكتاب وشفرة المصدر
- ويليام ف. كلوكسين، كريستوفر س. ميليش: البرمجة بلغة برولوج: استخدام معيار ISO . سبرينغر، الطبعة الخامسة، 2003، ISBN 978-3-540-00678-7( تم تحديث هذه الطبعة لتتوافق مع معيار ISO Prolog. وصفت الطبعات السابقة معيار Edinburgh Prolog.)
- ويليام ف. كلوكسين: الشرط والأثر. برمجة برولوج للمبرمج العامل . سبرينغر، 2003، رقم ISBN 978-3-540-62971-9.
- مايكل أ. كوفينجتون ، دونالد نوت، أندريه فيلينو، برمجة برولوج بتعمق ، 1996، رقم ISBN 0-13-138645-X.
- مايكل أ. كوفينجتون، معالجة اللغة الطبيعية لمبرمجي برولوج ، 1994، رقم ISBN 978-0-13-629213-5
- MS Dawe و CMDawe، مقدمة في علوم الحاسوب ، Springer Verlag 1992.
- ISO/IEC 13211: تكنولوجيا المعلومات – لغات البرمجة – برولوج . المنظمة الدولية للتوحيد القياسي ، جنيف.
- فيليكس كلوزنياك وستانيسواف شباكوفيتش (بمساهمة من يانوش س. بين). برولوج للمبرمجين . دار النشر الأكاديمية (لندن)، 1985، 1987 (متوفر بموجب ترخيص المشاع الإبداعي على الموقع الإلكتروني sites.google.com/site/prologforprogrammers/
) . رقم ISBN 0-12-416521-4. - ريتشارد أوكيف ، فن البرولوج ، رقم ISBN 0-262-15039-5.
- روبرت سميث، جون جيبسون، آرون سلومان : "دعم الآلة الافتراضية ثنائية المستوى لـ POPLOG للغات التفاعلية"، في اتجاهات البحث في العلوم المعرفية المجلد 5: الذكاء الاصطناعي ، تحرير د. سليمان ون. بيرنسن، لورانس إيرلبوم أسوشيتس، الصفحات 203-231، 1992.
- ليون ستيرلينغ وإيهود شابيرو ، فن لغة برولوج: تقنيات برمجة متقدمة ، 1994، رقم ISBN 0-262-19338-8.
- ديفيد إتش دي وارين، لويس إم بيريرا وفرناندو بيريرا، برولوج - اللغة وتنفيذها مقارنة بلغة ليسب. أرشيف نشرة ACM SIGART، العدد 64. وقائع ندوة 1977 حول الذكاء الاصطناعي ولغات البرمجة، الصفحات 109-115.
روابط خارجية
مقدمة في ويكي بوكس
- لغات البرمجة ذات الكتابة الديناميكية
- الاختراعات الفرنسية
- لغات البرمجة المتجانسة
- لغات البرمجة المنطقية
- لغات برمجة مطابقة الأنماط
- لغات البرمجة التي تم إنشاؤها عام 1972
- لغات البرمجة ذات معيار ISO
- عائلة لغات البرمجة برولوج
