Не думая о многом, мне кажется, что большой набор функций Prolog может быть реализован как реляционное исчисление (a.k.a. SQL).
Кто-нибудь слышал о каких-либо инструментах для автоматического преобразования Prolog в SQL?
Не думая о многом, мне кажется, что большой набор функций Prolog может быть реализован как реляционное исчисление (a.k.a. SQL).
Кто-нибудь слышал о каких-либо инструментах для автоматического преобразования Prolog в SQL?
Рекомендуя:
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 конечно
Да, конечно.
Предпосылка для скептиков: любая полуподобная книга по теории базы данных упоминает Datalog (что является прологовым) и теоремы, которые демонстрируют что можно перевести в/из реляционной алгебры (RA) (при определенных ограничениях).
SQL не соответствует RA или реляционным исчислениям, но достаточно для поддержки Prolog:
Отображение не очень хорошо. SQL, например, не выполняет откат, объединение, списки или adhoc вложенные структуры.
Пролог не справляется с составными объектами, индексами и т.д.
Я бы сказал, что это не-go.
Сложнее делать запрос sql из пролога, который затем можно перевести в пролог. например Пролог ODBC Library
Это устраняет все ограничения и удерживает два языка в соответствующих местах.
Я написал переводчик, который преобразует подмножество 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.