ふつけるを読んでいてちょっと?となったところ(その1)
ふつけるのP53の2.8練習問題で
1 標準入出力から読んだバイト数を数えるコマンド、countbyteを書きなさい。
というのがある。Haskellでは文字列は文字のリストなので、ふつうに書くと
countbyte.hs
main = do cs <- getContents print $ length cs
こんなかんじで良さそうではある。
% ghc countbyte.hs -o countbyte
% ./countbyte < hoge.txt
のように実行すれば確かにちゃんと動く。
そこで
% ./countbyte
とだけ入力して実行して、つぎの行で
abcdefghijklmnopqrstuvwxyz
などと入力してリターンキーを押しても何も起こらない。
一行ごとにそのバイト数を表示することを期待しているがどうやらこれではだめな模様。
ふつけるにあった似たようなプログラムでファイルの中身を表示するcat.hsというものがあって(P34あたり参照)
cat.hs
main = do cs <- getContents putStr cs
% ghc cat.hs -o cat % ./cat
とし、次の行で適当にafoと入力してリターンキーを押せば
afo
と返ってくる。
うーん、それでは一行ごとにバイト数を表示させるにはどうしたらいいんだろう。
countbyte.hsとcat.hsの違いはlength関数とprint, putStr関数なので、ここらのどこかにその違いを生んでいるところがあるはずなのだが、よくわからない><