سؤال
دون التفكير كثيرا، يبدو لي أن مجموعة كبيرة من وظائف Prolog يمكن تنفيذها كعلاقة حسابية صحي (AKA SQL).
هل سمع أي شخص عن أي أدوات لتحويل prolog تلقائيا إلى SQL؟
المحلول
التوصية:
https://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/code/io/pl2sql/0.html.
نصيحتي - استخدم Eclipse Prolog (http://www.eclipseclp.org/) (ليس (هنا) مرتبطا بالبتناول في Eclipse IDE).
قضيت ساعات في محاولة للحصول على الكود لتجميعها في 4 وصفات أخرى (!) و 4 دقائق لتجميعها في الكسوف.
عندما يعمل، إنه شيء من الجمال.
الائتمان لهير دروسلر بالطبع
نصائح أخرى
نعم طبعا.
فرضية للمتشككين: أي كتاب نصف لائقة حول نظرية قاعدة البيانات يذكر سجل البيانات (وهو ما يشبه البورتالولوجيا) والنظريات التي تظهر من الممكن ترجمةها من / إلى الجبر العلائقية (RA) (بموجب قيود محددة).
SQL ليس مخلصا ل RA أو Calculi العلائقية، ولكن يكفي لدعم Prolog:
- كريستوف دراكسر قام بتطوير Prolog to SQL Compiler (PL2SQL) لأطروحته، نأمل أن تستمتع هذا المعرض (.tgz) - هنا أيضا في وحدة المخابرات الاصطناعية CMU (تم تكييفها وإدراجها في الأقل على الأقل: ciao prolog. و SWI-Prolog. عبر BLIPKIT - طقم المعرفة المنطق الطبية الحيوية);
- تطورت إيغور Wojnicki لدكتوراه (محرك الاستدلال القائم على القواعد يمدد إمكانيات معالجة المعرفة لأنظمة إدارة قواعد البيانات العلائقية) نظام النموذج الأولي ينفذ له جيلي عرض التكنولوجيا مسمى redares., ، ولكن يبدو غير متاح للتنزيل؛
- آلة مجردة العلائقية (ذاكرة الوصول العشوائي) يترجم الوصلات إلى الجبر العلائقية، لكنه لا يبدو أنه يحتوي على BACKEND SQL؛
- والتر د. بوتر لديه بضعة أوراق على التكامل prolog / rdbms؛
- ورقة كيفن بوون على باستخدام SQL مع Prolog لتحسين الأداء مع قواعد البيانات الكبيرة هو أيضا مثيرة للاهتمام.
- وما إلى ذلك وهلم جرا...
الخروبة ليست جيدة جدا. SQL، على سبيل المثال، لا تفعل التراجع أو التوحيد أو القوائم أو الهياكل المتداخلة ADHOC.
Prolog لا يتعامل بشكل جيد مع الكائنات المركبة، الفهارس، إلخ.
أود أن أقول أنها لا تذهب.
من المنطقي إجراء استعلام SQL من Prolog، والتي يمكن بعد ذلك ترجمةها إلى حقائق وصفتولوجية. على سبيل المثال مكتبة prolog odbc
هذا يزيل جميع القيود ويبقي اللغتين مفصولة في أماكنها المناسبة.
أنا كتب مترجم يحول ذلك مجموعة فرعية من Prolog إلى وظائف SQL المعرفة من قبل SQL.
يمكن ترجمة هذه المسند في prolog إلى SQL:
is_between(A,B,C) :-
A<B,B<C.
هذا هو إخراج المترجم كدالة MySQL:
CREATE FUNCTION is_between(A double,B double,C double) RETURNS BIT BEGIN
RETURN A>B and B>C;
END
وبالمثل، هناك بروتوكول بروتوكلي مترجم SWI-PROLOG، و مترجم آخر يحول ذلك مجموعة فرعية غير متكررة من Datalog إلى SQL.