>>799
すいません、まだ良く理解できていません。
2点確認させてください。


まず、1行目でおっしゃっているのは参照透過性のことですよね。


次に、3行目以降でおっしゃっていることですが、それは本当ですか?
それだと勝手にメモ化が行われているように私には見えるのですが。

例えば f x = x*2 という関数が定義されているとします。
その時に、別の関数 g の定義の中で、

let a = f 1; b = f 1 in ...

とやっても、1度目の g の呼び出しで 1*2 の計算結果は再利用されませんよね。
a の束縛時と b の束縛時で、計 2 回同じ計算がされると思います。

1度目の g の呼び出しで a や b が 2 と評価された後、再び g が呼ばれた時は、
a や b はもう関数 f ではなく値 2 を指していますから、
これを以て「保存される」「再利用される」と言うのは理解できます。

以上のことから、enumerate 1 = [[A], [B], [C]] のリストも、
このままでは再利用されないと思うのですが。
再利用するには、計算結果を変数に束縛する必要がありませんか。


変なことを言っていたらすいません。