遅延評価

5.2 遅延評価のシミュレーション

これまで出てきたコードを使って、遅延評価の動きを見ていこうという内容です。
myIf関数やmap関数を使ってのパターンマッチによる遅延評価はとてもよく分かりました。


これらの例を見ていると、遅延評価はパターンマッチが発生するか否かがとても重要な点なんですね。
パターンマッチされる時に式が、パターンマッチ出来るまで評価されるんですね。

標準入力の取扱いについて

…ですが、ちょっと分からないことも。
たとえば、以前作ったexpand(バージョン0)は実行すると


以前作ったexpand0の抜粋

main = do cs <- getContents
          putStr $ expand cs


実行結果

% ./expand0
hogehoge     hoge
hogehoge@hoge
mazumazu    kana
mazumazu@kana


というように、Enterキーが押されるとexpandの変換ロジック(TABを@に換える)が動いています。
素人考えでは、Ctrl-Dが押されて始めてexpandの変換ロジックが動くように思うんですが、そうじゃないみたい。


本書には、補足としてputStr関数が返すアクションが文字列を表示しようとして、標準入力から文字列が読み込まれる
と書いてありましたが、Enterキーがその文字列読み込みの区切りになるんでしょうか?
Enterキーが押されたら一旦読み込みをやめて、読み込んだ分だけ変換して、次の入力を読み込もうとする。


う〜ん、慣れないと見失いそうな感じです。