Кажется, что написание декларативного SQL
очень популярно в императивном программировании . Тем не менее, также кажется, что написание декларативного Prolog
может сэкономить много сложности, но это не очень распространено.
Есть ли исторический прецедент для этого очевидного предпочтения SQL над Прологом?
Если причина заключается в отсутствии собственной поддержки императивными языками, то можно ли ответить, почему создатели языка не сочли полезным изначально поддерживать Prolog
их?
Чтобы привести некоторые конкретные примеры:
Пример 1
Оценка приложения займа может состоять всего из нескольких строк кода Prolog
, например SELECT/JOIN
запроса, в котором всего несколько строк кода SQL
, но, похоже, преимущество не так очевидно, как SQL
.
Пример 2
Вот еще один пример проблемы и решения в Прологе. Следующая логическая программа ограничения представляет собой упрощенный набор данных истории Джона как учителя:
teaches(john, hardware, T) :- 1990 ≤ T, T < 1999.
teaches(john, software, T) :- 1999 ≤ T, T < 2005.
teaches(john, logic, T) :- 2005 ≤ T, T ≤ 2012.
rank(john, instructor, T) :- 1990 ≤ T, T < 2010.
rank(john, professor, T) :- 2010 ≤ T, T < 2014.
Следующее предложение цели запрашивает набор данных, чтобы узнать, когда Джон преподавал логику и был профессором :
:- teaches(john, logic, T), rank(john, professor, T).
Результат:
2010 ≤ T, T ≤ 2012.
В приведенном выше примере будет легко SQL
получить тот же результат. Но предположим, что у вас есть эти данные в Array
. Тогда не так легко получить те же результаты, используя SQL
. А в случае данных, хранящихся в массиве, я считаю, что код Пролога будет легче писать и поддерживать.