関数型プログラミング言語Haskell Part13
■ このスレッドは過去ログ倉庫に格納されています
0898デフォルトの名無しさん
2011/02/17(木) 19:54:22君は >>892 で、ハスケルは参照透過性の為に更新=新しく作り直しだから遅いと言った
その事を理解する比喩として「メモリ空間に変更無しの所まで一からコピー」を挙げた
私はその比喩が妥当ではないと言っている
明らかに私の言い方が悪かったために正しく伝わらなかったのは認める
たとえば x = [a, b, c, d, e] というリストの3番目の要素である c を v に変えるとする
それをコンピュータで実現するための方法は様々あるが、(少なくとも)モダンな実装では、
メモリ内に [a, b, c, d, e] と [a, b, v, d, e] の両データを存在させるようにはなっていない
つまり、[a, b, c, d, e] と同じデータをもう一部コピーし、
その中の3番目の要素を v に変えるなんてことはしない
リスト は [a] -> [b] -> [c] -> [d] -> [e] -> Empty というポインタの数珠つなぎだから、
[b] -> のポイント先を [v] -> [d] -> [e] -> Empty に指し替えるだけだ
[a] も [b] も [d] も [e] も、メモリ内にはひとつしか存在しない
たしかにn番目の要素を変えるには、「普通は」1番目、2番目と辿っていく必要があるため、
君の >>895 の感覚は妥当だ(それが正しい「遅い理由」だ)
しかし、>>892 の比喩は、そのようなリスト操作が遅いことを理解する比喩としては全く的外れだ
■ このスレッドは過去ログ倉庫に格納されています