関数型プログラミング言語Haskell Part17
■ このスレッドは過去ログ倉庫に格納されています
003721
2012/01/03(火) 21:27:08.07> 「関数間にまたがってまで計算順序を意識する必要がない」とようないう意味だね?
こちらこそ、なるほどなと思わせる解釈だが、私の言いたかったことは半分正解
当然ながら計算を追うには複数の関数を跨がないといけない
関数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プログラムだから論外だ
■ このスレッドは過去ログ倉庫に格納されています