Пролог к конвертеру SQL
Не думая о многом, мне кажется, что большой набор функций Prolog может быть реализован как реляционное исчисление (a.k.a. SQL).
Кто-нибудь слышал о каких-либо инструментах для автоматического преобразования Prolog в SQL?
Ответы
Ответ 1
Рекомендуя:
https://www.cs.cmu.edu/afs/cs/project/ai-repository/ai/lang/prolog/code/io/pl2sql/0.html
мой совет - используйте пролог Eclipse (http://www.eclipseclp.org/) (не (здесь), чтобы его путать с прологом в Eclipse IDE).
Я потратил часы, пытаясь скомпилировать код в 4 других прологах (!) и 4 минуты для компиляции в eclipse.
Когда это работает, это вещь красоты.
Кредит господину Draxler конечно
Ответ 2
Да, конечно.
Предпосылка для скептиков: любая полуподобная книга по теории базы данных упоминает Datalog (что является прологовым) и теоремы, которые демонстрируют что можно перевести в/из реляционной алгебры (RA) (при определенных ограничениях).
SQL не соответствует RA или реляционным исчислениям, но достаточно для поддержки Prolog:
- Christoph Draxler разработал компилятор Prolog to SQL (PL2SQL) для своей диссертации, доступен для скачивания (.tgz) - также здесь, в CMU Artificial Intelligence Repository (он был адаптирован и включен, по крайней мере,: Ciao Prolog и SWI-Prolog через Blipkit - биомедицинский набор для интеграции знаний программирования LogIc);
- Игорь Войницкий разработал для своего PhD (механизм вывода на основе правил, расширяющий возможности обработки данных в системах реляционных баз данных), прототип системы, реализующей его технология Jelly View называется ReDaReS, но, похоже, она недоступна для загрузки;
- Реляционная абстрактная машина (ОЗУ) переводит Prolog в реляционную алгебру, но у нее, похоже, нет бэкэнда SQL;
- У Вальтера Д. Поттера несколько статей по интеграции Prolog/RDBMS;
- Бумага Kevin Boone на Использование SQL с Prolog для повышения производительности с большими базами данных также интересно;
- и т.д....
Ответ 3
Отображение не очень хорошо. SQL, например, не выполняет откат, объединение, списки или adhoc вложенные структуры.
Пролог не справляется с составными объектами, индексами и т.д.
Я бы сказал, что это не-go.
Ответ 4
Сложнее делать запрос sql из пролога, который затем можно перевести в пролог. например Пролог ODBC Library
Это устраняет все ограничения и удерживает два языка в соответствующих местах.
Ответ 5
Я написал переводчик, который преобразует подмножество Prolog в пользовательские функции SQL.
Этот предикат в Прологе может быть переведен в 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
Аналогично, есть компилятор Пролог-в-SQL для SWI-Prolog и другой транслятор, который преобразует нерекурсивное подмножество Datalog в SQL.