みんな木が好き
23.10.25
Joyce Kilmer and most computer scientists agree: there is no poem as lovely as a tree.
Philip Wadler, “A prettier printer”
「コンピュータ科学者はみんな木ほど愛しい詩はないと思っている」とコンピュータ科学者の Philip Wadler は言いました。
豊かな自然の風景にある木々は、みんな美しいと思うでしょう。でも、なぜ、「コンピュータ科学者」なのでしょう?
コンピュータの仕事は、データから情報を取り出して分析し、その結果を伝えることでしたね。データは、単なる記号列なので、そのままでは情報は取り出せませんし、分析結果という情報は記号列に置き換えることでしか伝えることができません。そこで、コンピュータでは、以下のような手順を実施することになります。
- 記号列をパーツに分解し、それぞれのパーツを関連付けて元の「情報構造」を再構成
- 再構成した「情報構造」を組み換えたり、いくつかをまとめて名前をつけたりして、新しい「情報構造」を構成
- 構成した新しい「情報構造」を符号化して記号列を作成
ここで登場する「情報構造」の基本形が、木(ツリー)です。分類の系統図のイメージですね。
このような手順は、コンピュータプログラムを書くとき、いつも、なんらかの形ででてきます。コンピュータ科学者はいつも、どうしたら、記号列から木を取り出せるか?どうしたら、木を記号列にできるか?を考えているといってよいでしょう。だから、「コンピュータ科学者はみんな木が好き」と。
それぞれにいろいろな工夫があり、1とおりの正解があるわけではありません。そこが面白いところです。
さらに面白いことに、プログラムは、記号列(データ)を別の記号列(データ)に変換する手順(アルゴリズム)です。同時に変換手順(アルゴリズム)という情報を記号列として記したデータでもあります。したがって、プログラムをデータとして扱う、プログラム(アルゴリズム)というものを考えることができます。
「プログラムを扱うプログラム」って、すこし、奇妙だけど、面白いですよね。でも、単なる空想ではなく、そういうプログラムは存在します。ファイルに書かれたプログラムは、単なる記号列です。それをコンピュータで読み取り情報構造(ツリー)を再構成します。再構成したツリーを組み換え、まとめて、新しいツリーを構成し、これをコンピュータのCPUの命令列(記号列)に変換する。これが、「プログラムを扱うプログラム」コンパイラの仕事です。
Wadler は「よりプリティなプリティプリンタ」で、ツリーを表示するプログラム(プリティプリンタまたは清書器)の話をしています。上述3.の手順で使うツリーと符号化のアルゴリズムをどうデザイン(設計)するかの話でした。
※ ツイッター・インスタグラムも日々更新しています!