これは気付かないわ

Common Lispについて。CLtL2の仕様書には邦訳があったので、今ちょっとだけ読んでいる。なぜそうしたのか? なぜそうあるべきなのか? 膨大な仕様記述の中に大量の解説が埋め込まれていて勉強になる。

そもそも、CLOSとかコンディションシステムとかは複雑でよくわからんので、言語自体の学習も目的の一つだったり。

ちょっと驚いたのがコレ

X3J13は1989年1月に、defconstantで定義された定義シンボルをレキシカルあるいはスペシャル変数として再束縛することはエラーであることの明確化<48>を議決した。結局defconstantで定義されたシンボルの値は常にグローバルな値を参照する。(不幸にもこれは参照透明性(referential transparency)を破壊する。つまり、まわりの文脈を考慮することなしに、レキシカル変数として使うことのできる名前を選ぶことができない。)

定数を宣言するdefconstantオペレータの仕様は、参照透明性を破壊するらしい。……なるほど言われてみれば分からなくもないが、微妙すぎる。プログラミング言語はきわどいバランスの上に成立しているようだ。

そういえば、Schemeでもcall/ccが参照透明性を崩すという話題を聞いたことがあるような。