Является ли SQL в основном специфичным для домена экземпляром map + fold + filter?
Мне кажется, что следующий SQL:
SELECT name
FROM fruits
WHERE calories < 100
просто синтаксический сахар для следующей операции 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; });
Это совпадение или есть смысловая семантическая эквивалентность, которая может быть доказана? Как примерно?
Я знаю, что на практике в SQL много наворотов, но по своей сути это просто операция фильтра карты-сгиба?
Следующая статья актуальна: http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx
functional-programming
sql
dsl
Шридхар Сарнобат
источник
источник
Ответы:
Взгляните на LINQ , который берет основные понятия, лежащие в основе SQL, и обобщает его для объектно-ориентированного программирования.
Where
Оператор является болотно-стандартным фильтром, тоSelect
оператор является проекция / на карте, и так далее. Все основные операции SQL-запросов представлены в LINQ, реализованы с использованием функций высшего порядка, так что да, вы правы в своем интуитивном понимании SQL.Большая разница между вашим примером и тем, как работает реляционная база данных, состоит в том, что SQL разработан с очень ограниченным набором команд. Он не является полным по Тьюрингу, и разработчики баз данных знают, что он может и не может делать, что значительно облегчает им разработку системы для оптимизации запросов в гораздо большей степени, чем это было бы возможно при простом
Map
перечислении набора данных. элемент-на-элемент.источник
SQL основан на реляционной алгебре и реляционном исчислении кортежей, а не на функциях высшего порядка или функциональном программировании. Хотя SELECT, FROM и WHERE имеют аналогичные функции в других языках, сам SQL не поддерживает обобщенные функции высшего порядка, а только те функции «высшего порядка», которые определяет сам язык.
Поскольку SQL не позволяет вам писать собственные пользовательские функции высшего порядка, нельзя утверждать, что язык поддерживает функции высшего порядка.
источник