Wygląda na to, że pisanie deklaratywne SQL
jest bardzo popularne w programowaniu imperatywnym . Wydaje się jednak również, że pisanie deklaratywne Prolog
może zaoszczędzić wiele złożoności, ale nie jest to zbyt powszechne.
Czy istnieje historyczny precedens dla tej pozornej preferencji SQL nad Prologiem?
Jeśli przyczyną jest brak natywnego wsparcia przez języki imperatywne , to czy można odpowiedzieć, dlaczego twórcy języków nie uznali za przydatne natywnego wsparcia Prolog
?
Aby podać konkretne przykłady:
Przykład 1
Ocena wniosku o pożyczkę może składać się tylko z kilku wierszy kodu Prolog
, podobnie jak SELECT/JOIN
zapytanie zawierające tylko kilka wierszy kodu SQL
, ale wydaje się, że przewaga nie jest tak oczywista jak SQL
.
Przykład 2
Oto kolejny przykładowy problem i rozwiązanie w Prologu. Poniższy program logiczny z ograniczeniami reprezentuje uproszczony zestaw danych z historii Johna jako nauczyciela:
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.
Następująca klauzula celu wysyła zapytanie do zestawu danych, aby dowiedzieć się, kiedy John zarówno uczył logiki, jak i był profesorem :
:- teaches(john, logic, T), rank(john, professor, T).
Wynik:
2010 ≤ T, T ≤ 2012.
W powyższym przykładzie SQL
uzyskanie tego samego wyniku będzie łatwe . Załóżmy jednak, że masz te dane w pliku Array
. Wtedy nie jest tak łatwo uzyskać takie same wyniki przy użyciu SQL
. A w przypadku danych przechowywanych w tablicy uważam, że kod Prolog będzie łatwiejszy do napisania i utrzymania.