プログラミング方法論

前回の宿題の返却が行われ、なんとまたもや満点!!。うれしいような、こんなところで運を使いたくないような。
来週返される中間試験は確実に満点ではないので、もう満点が続くことはないだろうけど。
さて、今回は前回に引き続きimperative features、訳すと「手続き言語的な機能」。例えば、Cでいうところのポインタの機能。まぁCよりは易しいので、こちらであればみんな理解できるかな?と思ったけど、むしろいままでMLを理解しやすいっていた人たちにはなじめないよう。例えば、

ref 1 = ref 1

の結果はfalseである。これは1という値の比較ではなく、1が格納されているアドレスの比較だからである。つまり、この1はそれぞれ別の領域を占有している。ちなみにrefはCでいえば&にあたる演算子なのだが、試すとリテラルな値には適用できないようだ。
で、以下のMLの式はtrueになる。

(fn x => x = x) (ref 1)

これは一つの変数のアドレスを関数式に渡しているに過ぎないからである。
C言語になれた人なら比較的理解しやすいこれらの事実が、関数型言語原理主義者、というと悪い意味に取られそうなので純粋な関数型言語支持者にとっては、許せないらしい。よって、これを回避する理論が様々考案されているという。
どちらがいいのかは、まだ関数型言語初心者の私にはようわからんけど。
で、最後にhomeworkがでる。さぁはりきってやらなきゃ。