データ構造とアルゴリズム(個人的見解)
データ構造とアルゴリズムについての個人的見解を散文的に書いてみたい。
まずプログラミング言語の定義についてここで私的定義を述べておきたい。
【プログラミング言語とは】
・アルゴリズムを記述する文法を有したコンピュータ言語である。
・文法の中には順次・分岐・繰り返しの制御文を持つ。(背景には
構造化定理がある。)
別のプログラミング言語の定義として
チューリング完全であるという定義があるが、
ここではそのスタンスは取らない。
よってここで語るプログラミング言語とは狭義な意味でのプログラミング言語である。
(だからここではHTMLなどの言語はプログラミング言語からは除く。)
【データ構造とアルゴリズムとは】
そもそもプログラミング言語としてアルゴリズムを書くときには何らかの構造化
されたデータ構造を仮定する。
データに構造を入れて、初めてプログラミング言語はアルゴリズムとして、その
データを扱うことができる。
配列・リスト・ツリーなど、データに何らかの構造を入れることで、プログラミング
言語はアルゴリズムからデータを扱うことが出来るのである。
HTMLなどの言語は文書に構造を入れるための手段であり、アルゴリズムではない。
HTMLで構造化された文書データはDOMという多分木に解釈され、JavaScriptなどの
プログラミング言語がそのデータ構造を探索して、処理する。
だからHTMLはわざわざプログラミング言語から外したのだ。
リレーショナルデータベースも然りである。
データに表と言うデータ構造を入れて、SQLでテーブルを検索・更新・削除・追加が
できる。SQLは一見、順次・分岐・繰り返しはないように見えるが、内部では、実際に
そのような制御が動作している。だからSQLもここではプログラミング言語の1つとして
扱う。
世の中には非構造化データが存在し、かつその方が一般的だが、非構造化データは
データの加工によってプログラムから扱う事が可能な構造化データに変換される。
つまるところ何が言いたいのかというと、プログラミングするとは、データに何等かの
構造を入れ、その構造をアルゴリズムという手段を用いることで、データの探索・加工
を行うことがプログラミングの本質なのであろうと私は思う。
今、私が話しているのは構造化プログラミングと呼ばれているものに限定しているかも
しれない。
関数型プログラミング言語では、そもそもが関数という作用から出発して、データを
作用という起点から定義しなおして、アルゴリズムを生成的に考えるという処から
出発しているように思えるが、ある種、それは純粋な意味で破綻している。
つまり、プログラムは参照透過性を基本課しており、データ処理に関する考察が
抜けている。基本、計算のみを追求しているプログラミング言語だからだ。
だから参照透過性を保てない入出力に関しては、モナド則などを導入して、プログラミング
言語としての矛盾をトリッキーな形で定式化して、プログラミング言語の体面を保っているが
私から見れば、それはデータを無視して、純粋にアルゴリズムだけでプログラミング言語
を形作ろうとした結果、歪んだ特異点のようなものができてしまったようにしか見えない。
プログラミング言語にとって、データとアルゴリズムを包括的に扱えるのが必須条件だと
私は思う。
だからデータ構造とアルゴリズムが平易に書ける言語が良いプログラミング言語と言える。
という訳で、結論も何もないのだが、自分なりにプログラミング言語とは何かについて
の個人的見解を乱筆で書いてみた。