熟練したLisperは括弧を意識しない件について

熟練したLisperは括弧を意識しないという。
では何を意識しているのか?
それは、ソースコードのS式をreadした後の内部表現(以下、これを「S式の内部表現」と呼ぶ)である!逆に言うならば、脳内にある「S式の内部表現」をwrite(もしくはpretty-print)したものこそがLispソースコードなのだ!


……と言えるとカッコ良いけど、実際に「S式の内部表現」で考えてコードを書くのはマクロを定義する時ぐらいで。普段は大体インデントだけ意識して、括弧についてはエディタのサポートに頼りっきりなのが現実のようだ(少なくとも自分は)。
でも前述のマクロ定義の件と、「S式の内部表現」を脳内でイメージできないとまともにコードが書けないとは思うので、全くの誇張表現という訳でもないだろう。


ついでに、話は代わるけれど。
Lispにとって一番重要なのは「ソースコードが、内部データ型で表現されている」(※)という点であって、これこそがLispの力の源だと思う。
だからS式を採用してなくても、「ソースコードが、内部データ型で表現されている」言語があれば、それはLisp(と同等の力を持つ)と言える、と思う。


※例えば、JSONJavaScriptの内部データ型で表現されていて、JSONをreadするとJavaScriptの内部表現が得られるけれど、JSON自体はJavaScriptソースコード(実行できるプログラムソース)ではないので、JavaScript自体は「ソースコードが、内部データ型で表現されている」とは言えない。逆にXSLTは「ソースコードが、内部データ型で表現されている」と言えると思う多分(でも関係ないけど人間が読み書きするには向いてないと思う)。


今日の主張: 「S式の内部表現」こそが最も重要!しかしテキストファイル(として書かれるソースファイル)ではそれを直に扱えないので、「S式」として文字列化せざるをえない。「Lispは括弧が嫌」とかいう人は「S式」しか見えていないので、そういう人にLispを勧めるには、どうにかして『Lisperが見ているのは「S式」じゃなく「S式の内部表現」なのだ』という事を理解させるのがいいのではないか?という仮説。未検証。


追記: 今回の内容を書いて読んでみて「どこかで読んだ内容だ」と思い直して調べたら、 http://practical-scheme.net/wiliki/wiliki.cgi?Lisp%3AS%E5%BC%8F%E3%81%AE%E7%90%86%E7%94%B1 だった。昔にこれを読んで、今頃自分の中でまた出てきたようだ。今回の内容は大体そういう事で。