Haskellerのための命令プログラミング用語講座

本記事が読者として想定しているのは純粋非正格静的型付けプログラミングしかできない純粋培養ハスケラ(Haskeller)のみなさんです.

だれがなんといおうとマイノリティである純粋培養ハスケラは,だれがなんといおうとマジョリティであるシャー(C er),プラプラー(C++er),じゃばー(Javaar),ぱーらー(Perler),ぺちぱぁ(PHPer),ルビーィスト(Rubyist)...のみなさまが語られるプログラミング(言語)にまつわる苦労話についていくための最低限の基礎知識を身につけなければなりません.もちろん,個々の命令プログラミング言語の詳細が理解できればいいのですが,実際にはそれ以前のわかってない幼気な純粋培養ハスケラがなんと多い!?ことでしょうか.命令プログラミング言語界の掟,常識が解っていないことが多いのです.関数プログラミング界にはない概念を関数プログラミング界の言葉で語ろうとしたり,関数プログラミング界でまかりとおる非常識な用語の解釈,使用をそれが非常識であることに気づくことなく使っていることが多いのです.KYの極み,タトしまくりでは,イジメられても文句はいえません.まずはReal World(浮世)の常識を学び,自らの非常識を知ることが大切です.

変数

「変数は値に付けられた名前」とかいって簡単にすませようとしてはいけません.そんな非常識は命令プログラミングの世界では通用しません.大人の世界はそんな単純ではないのです.
変数は出現位置によって解釈が違います.代入演算子の左辺ではデータの記憶領域を指すものですが,右辺ではその記憶領域に書き込まれているデータを指すものです.

変数は値に束縛されるものではありません.もっと自由です.変数はデータを代入するもの(対象)です.変数は束縛されたときに表す値が決まるから,同一の有効範囲なら同じ値を表すけれど,有効範囲が違えば束縛も違うので表す値も違う,だから「変数」というのだ,なんて勘違いですよ.変数は有効範囲にかかわらず,代入によって,指す値が変るから変数というのです.有効範囲というのは左辺値としての有効範囲であって,右辺値の有効範囲ではないですからね.同一有効範囲で同じ値を指すならそれは,定数といいます.

定数

そうです.もうわかりましたね.定数はデータ構成子(値構成子)のことではないですよ.それはリテラルというのが普通です.δ簡約とかを持ち出してはいけませんよ.リテラルの事を定数と言うこともないわけではないようですが,まれなようですよ.同一有効範囲内で再代入できない変数を定数というのです.

代入

同一有効範囲にある変数を別の式に置き換えることではありませんよ.代入といえば,変数の左辺値で表される記憶領域にデータを配置することです.代入演算子は = と書かれることが多いのですが,これは束縛じゃないですからね.

代入は同じ変数に対して何度でもできることが重要です.記憶領域という大切な資源を少しでも効率良く使わなければならないからです.

同じ有効範囲で変数の右辺値がころころ変わるから虫が入りやすいですって!?プロならそんなことを言ってはいけません.虫退治こそがプログラマの仕事ですよ.素人が手を出さない世界こそがプログラマとしての生業がなりたつところですよ.そんな面倒なことはコンピュータにやらせてもっとクリエイティブな仕事がしたいって!?そんな青臭いこといってはいけませんよ.それに非力なコンピュータの仕事を増やしてどうするんですか.

あれっ.用語解説じゃなかったの?お説教?

副作用

これはもっとも注意しなければいけない用語です.そもそも副作用のふの字もない世界にいるものが,副作用とそうでないものとが混在している世界の複雑さを理解できるわけはないのです.プログラミング言語Haskellには副作用がないの?などと問われたら,副作用って何ですかと素直に尋ねて教えてもらいましょう.副作用を気にしたことはないと言おうとして,いきなり「Haskellにはは一切ありません」などと口走ってはいけません.副作用のない言語などI/Oもできずに全く実用的じゃありませんからね.

だいたい,プログラムの意味とは値のことなんて極端な単純化で複雑な浮世が理解できるわけないでしょ.浮世は時間とともに変化する状態が本質だっていうのに,状態(という概念)のない言語でまともに扱えるわけないということを自覚しましょう.えっ.状態が実在するわけじゃなく,それは1つのモデルだって!?そんな空想をしているからだめなんですよ.時間が本質的だって,SICPにも書いてあるでしょ.なに2章までと3章の関数プログラミングのところしか読んでないだって.は〜ぁ.状態なんぞを考えるから時間という概念が生まれて,いたづらに複雑になるんだだと.君ねぇ.世界は実際複雑なんだからね.

ヌルポを発明したホーア先生だって言っているでしょ.明かにバグがないように単純にするか,明らかなバグがないように複雑にするかでは前者の方がはるかに難しい.って.チューリング賞受賞者が言うんだから.単純にするなんてのは理想論の絵空事だからね.

...これ以上解説してもらえなさそうですね.orz