- 37 名前:21 mailto:sage [2012/01/03(火) 21:27:08.07 ]
- >>35
> 「関数間にまたがってまで計算順序を意識する必要がない」とようないう意味だね? こちらこそ、なるほどなと思わせる解釈だが、私の言いたかったことは半分正解 当然ながら計算を追うには複数の関数を跨がないといけない 関数Aの中で関数Bと関数Cを使っていたら、 関数Aの最終的な値が「計算される仕組み=計算過程」を知るには 関数Bも関数Cも計算を追わないと絶対にわからない ただ、関数Bや関数Cは(関数Aのlet節やwhere節で宣言されたものでないかぎり) 普通は関数Aの環境からは独立しているはずだ もちろん互いの環境とも独立しているはず であれば、関数Bの計算は、関数Cの計算とは全く関係ないはずだ 参照透過性ゆえに「自動的に」そうならざるをえない なので、たとえば関数Bのデバッグは関数Cとは独立して行える これが「各宣言を独立に扱える」ということ 関数Aの計算過程を追うには関数Bや関数Cを跨ぐ必要があるが、 関数Bや関数Cの計算過程を追うには関数間をまたぐ必要がない だから(私が言いたかったことに関しては)半分正解 ちなみに、関数Bの戻り値に関数Cを適用すればまたがるだろという意見もあろうが、 それでも関数Cを計算する仕組みは変わらない 関数Cを引数の値によって計算そのものを変える事もできてしまうが、 そこまで行くと筋の悪るすぎるHaskellプログラムだから論外だ
|

|