Я начал изучать Пролог и задаваться вопросом о теоретическом различии от языка SQL.
Например:
Еще общие точки? Какие-либо заметные различия?
Большинство (ранее) ответов здесь - это отражение того факта, что большинство людей не знают, что является SQL (его реализация реляционного исчисления) или что означает (что это форма логики предикатов). Следующие утверждения являются верными для как пролога, так и SQL:
Вообще, люди не знают о Эти эквивалентности между ними:
Так каковы их различия? Хотя они работают на одних и тех же концептуальных доменах, их фокус в совершенно разных направлениях. В правильном выражении SQL является в первую очередь фактом и отношение (Set) двигателем, тогда как Prolog - это прежде всего правила и вывод двигателя. Каждый может сделать другой, в ограниченной степени, но он становится все более сложно с даже небольшим увеличением сложности. Например, вы можете сделать вывод в SQL, но он почти полностью руководствуется по своей природе, а не совсем как автоматическая выводимая пролога. И да, вы можете хранить данные (факты) в Prolog, но вообще не предназначены для «хранения, поиска, проекции и сокращения триллионов строк с тысячами одновременных пользователей», что SQL является.
Plus, SQL - это в первую очередь парадигма языка сервера, тогда как Prolog - это прежде всего парадигма языка клиента.
Есть много различий, которые я думаю, станет ясным, когда вы начинаете их использовать. Помните из-за изменений в терминологии, что-то, что называется то же самое в прошлом, значит, сейчас очень разные вещи.
Очень широкий обзор различий.
Заявления SQL работают против реляционной базы данных и запроса (запрашивают) данные из этой базы данных, изменения этих данных и результаты точно выражены на языке, тогда как в Prolog, который вы определяете факты, а логический двигатель генерирует новые факты существующих фактов. Новые данные (факты) создаются через оценку.
Они оба используют что-то называемое запросами (но они работают совершенно по-другому), и у них обоих есть данные (но используют его по-разному.)
Средства использования для SQL и Prolog также совершенно отличаются. Это никогда не имеет смысла хранить список адресов в прологе, тогда как это именно то, что SQL был разработан для этого.
Проще говоря, SQL используется для доступа к хранилищу данных и прологе - это оценщик выражения.
Я думаю, что главное отличие заключается в том, что пролог представляет собой язык запросов, используемый для сопоставления сложных шаблонов против базы данных простых фактов. SQL с другой стороны ограничен реляционными базами данных.
Вы также можете захотеть проверить GDAL Wiki, посвященный привязанию к Python - GDalogrinPython , где обсуждается установка и использование на платформах Linux и Windows.
-121--2949182-Всего несколько мыслей:
Вы правы: Prolog и SQL теоретически связаны (вы конкретно спрашивали о теоретических различиях).
Я хочу дополнить ответ RBarryYoung , дав вам несколько советов по пониманию связи, чтобы у вас была отправная точка для изучения и понимания технических деталей.
Пролог и SQL имеют общее ядро: каждый запрос, выражаемый в подмножестве Пролога, может быть выражен в подмножестве SQL и наоборот , т.е. эти подмножества логически эквивалентны.
Чтобы понять, как это может быть правдой, вам необходимо изучить, на каких теоретических основах основаны как Prolog, так и SQL:
Конечно, кое-что выходит. для этих подмножеств требуется больше усилий по переводу.
Тем не менее, я думаю, что утверждение, что эквивалентность в выразительной силе двух подмножеств больше, чем апелляция к эквивалентности Тьюринга 4 при рассмотрении Пролога в- Перевод SQL.
Примечания:
1) К сожалению, SQL можно использовать в отличие от теоретических основ СУБД ( реляционные алгебра-исчисления ); например, таблицы SQL не являются обязательно отношения - согласно RA - т.е. они могут быть без (первичного) ключа, поэтому разрешены повторяющиеся строки. Такие таблицы являются не наборами, а мультимножествами (также известными как пакеты) кортежей. , все теоретические результаты для RA, где отношения являются наборами, не обязательно верны.
2) Для перевод из SQL в TRC, см. Замечание о переводе SQL в исчисление кортежей , также здесь (постскриптум) .
3) Подробнее о различиях между Datalog и Prolog см. Что вы всегда хотели знать о Datalog (и никогда не осмеливались спросить) (документ в формате pdf - ссылки непосредственно на страницу 6, заголовок H. Datalog and Prolog ).
4) Для записи: RA (и, следовательно, их эквиваленты безопасный TRC и безопасный журнал данных без рекурсии) намеренно не является полным по Тьюрингу, чтобы избежать бесконечных запросов.
Историческое примечание: Пролог и реляционная алгебра Кодда были задуманы примерно в одно и то же время (конец 60-х - начало 70-х годов) в разных контекстах - Колмерауер задумал Пролог для обработки естественного языка, а Кодд задумал RA как теоретическую основу реляционной СУБД. Итак, любая теоретическая связь между Prolog-Datalog-RA-SQL была обязательно установлена a posteriori и подразумевается тем фактом, что все они основаны на исчислении предикатов первого порядка (также известном как логика первого порядка ).