SQLは基本的にマップ+フォールド+フィルターのドメイン固有のインスタンスですか?
次のSQLのようです:
SELECT name
FROM fruits
WHERE calories < 100
これは、次のマップ+フィルター+折りたたみ操作の構文糖衣です。
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には多くの基本機能が備わっていますが、その根底には、単純にmap-fold-filter操作がありますか?
関連する記事は次のとおりです。 http://blogs.msdn.com/b/doriancorompt/archive/2013/01/21/bringing-the-querying-power-of-sql-to-javascript.aspx
[〜#〜] linq [〜#〜] を見てください。これは、SQLの背後にある基本概念を取り入れ、オブジェクト指向プログラミングに一般化しています。 Where
演算子は沼地の標準フィルターであり、Select
演算子はプロジェクション/マップなどです。すべての基本的なSQLクエリ操作はLINQで表され、高次関数を使用して実装されているため、そうです、SQLの直感的な理解は正しいです。
これまでの例とリレーショナルデータベースの動作の大きな違いは、SQLは非常に限られた一連のコマンドを考慮して設計されていることです。それはチューリング完全ではなく、データベース設計者はそれができることとできないことを知っているので、単純なMap
データセットを要素ごとに列挙します。
SQLは、高階関数や関数型プログラミングではなく、リレーショナル代数とタプルリレーショナル計算に基づいています。 SELECT、FROM、およびWHEREは他の言語でも類似の関数を持っていますが、SQL自体は一般化された高次関数をサポートしていませんが、言語自体が定義する「高次」関数のみをサポートしています。
SQLでは独自のカスタム高次関数を記述できないため、言語が高次関数をサポートしているとは言えません。