遅延評価
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キーが押されたら一旦読み込みをやめて、読み込んだ分だけ変換して、次の入力を読み込もうとする。
う〜ん、慣れないと見失いそうな感じです。