Czy SQL jest w zasadzie specyficznym dla domeny wystąpieniem map + fold + filter?
Wydaje mi się, że następujący SQL:
SELECT name
FROM fruits
WHERE calories < 100
to tylko cukier syntaktyczny dla następującej operacji map + filter + fold:
var fruits = [{id : 1, name: 'orange', calories : 100},
{id : 2, name : 'banana', calories : 150},
{id : 3, name: 'apple', calories : '50'}];
fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories })
.filter(function(obj) { return obj.calories < 100 })
.reduce(function (accumulator, obj) { accumulator + "\n" + val.name; });
Czy to przypadek, czy też istnieje rozsądna równoważność semantyczna, którą można udowodnić? Z grubsza jak?
Wiem, że w praktyce SQL ma wiele dzwonków i gwizdków, ale czy jego rdzeniem jest po prostu operacja składania map?
Istotny jest następujący artykuł: http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx
functional-programming
sql
dsl
Sridhar Sarnobat
źródło
źródło
Odpowiedzi:
Spójrz na LINQ , który bierze podstawowe pojęcia za SQL i uogólnia go na programowanie obiektowe.
Where
Operatora jest Bog-standardowy filtr,Select
operator jest występ / Mapa, i tak dalej. Wszystkie podstawowe operacje zapytania SQL są reprezentowane w LINQ, zaimplementowane przy użyciu funkcji wyższego rzędu, więc tak, masz rację w intuicyjnym rozumieniu SQL.Dużą różnicą między twoim przykładem a sposobem działania relacyjnej bazy danych jest to, że SQL jest zaprojektowany z bardzo ograniczonym zestawem poleceń. Nie jest to kompletna metoda Turinga, a projektanci baz danych wiedzą, co mogą, a czego nie mogą zrobić, co znacznie ułatwia im zaprojektowanie systemu w celu zoptymalizowania zapytań w znacznie większym stopniu, niż byłoby to możliwe przy prostym
Map
wyliczeniu zestawu danych element po elemencie.źródło
SQL oparty jest na relacyjnej algebrze i Tuple Relational Calculus, a nie funkcjach wyższego rzędu ani programowaniu funkcjonalnym. Podczas gdy SELECT, FROM i WHERE mają analogiczne funkcje w innych językach, sam SQL nie obsługuje uogólnionych funkcji wyższego rzędu, ale tylko te funkcje „wyższego rzędu”, które sam język definiuje.
Ponieważ SQL nie pozwala na pisanie własnych niestandardowych funkcji wyższego rzędu, nie można powiedzieć z żadnym autorytetem, że język obsługuje funkcje wyższego rzędu.
źródło