言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

SQL, prolog, リスト

例えば PostgreSQL では、テーブルを操作する関数や演算子の定義なんかもまたテーブルの中に記述されている。記録システムとして一貫してテーブルを利用するシンプルな設計だ。prolog もまた、データとプログラムは同一のシステムに記述される。実行時型付けを行う言語の多くは同じような設計になっているが、宣言的であるという意味で、SQLprolog はよく似ている気がする。

一方で、 prolog にあって SQL に無い要素は何だろうか? prolog再帰的な定義を許す。従って、実際には記憶領域にないタブルを事実として返す事が出来るが、SQL はそういう事をしない。しかし、実は違いはその程度で、SQLprolog を融合すれば、prolog の美しさと SQL の分かりやすさを兼ね揃えたものができるのでは無いだろうか? これっとトンチンカンな発想か?

本屋で SQL に関する本を探しても、実用書ばかりで理論的な構造を表した物が見つからないのだが、リレーショナルデータベースだって最初は集合論から来ているに違いない。そして、もうちょっと綺麗なシステムを作れば、SQL、関数、オブジェクト指向の間の気持ち悪くて微妙な類似と相違が解決できるんじゃないかと思う。

表記の簡潔さという視点では、やはり関数型言語の味が素晴らしい。SELECT を表すには、やはりリストの内包表現かな?

SELECT "name", "salary" FROM staff WHERE "salary" < 1000;

[ (n, s) | [n, s] <- select staff ['name', 'salary']; s < 1000]

?- select(staff(Name, Salary)), Salary < 1000.