to2yの日記

 | 

2006-06-06「ふつける」勉強会2章レジュメ(完了)

練習問題

2つの処理が似ているので、delimit関数引数にとるcount関数

作成

countBytesはidentity関数なので、もっと良い書き方があるかもしれない

countbyte

main = do cs <- getContents
          print $ count cs countBytes
count cs delimit = length $ delimit cs -- 共通
countBytes cs = cs

at 勉強

バイト数がこれでカウントできるのは、2バイト文字が文字列中で2つの要素に分割されるから

countword

main = do cs <- getContents
          print $ count cs words
count cs delimit = length $ delimit cs -- 共通

ちょっとズルして無名関数を使って、countBytes関数を消してみる

countbyte 無名関数

main = do cs <- getContents
          print $ count cs (\x -> x) 
count cs delimite = length $ delimite cs

countbyte id使用

main = do cs <- getContents
          print $ count cs id
count cs delimite = length $ delimite cs

countbyte 最小サイズへ挑戦

コメントを受けてトライしてみた。

これ以上は無理か

main = getContents >>= print . length 

sshisshi2006/06/07 21:26恒等関数はまんま id ってのがあるよ。
これくらいの長さのコードだと(超範囲外だけど)、関数合成の多用であるポイントフリースタイル(p.209)とdo式の書き換え(p.278)を使うとものすごく短くなるよ。
#手探りでコメントつけてみた

sshisshi2006/06/12 00:59補足。GUIの話「なんだかそういうのがあるらしい」という話を耳にしただけで、haskellで実際そう使えるGUIライブラリがあるかどうかは知らない。で、今思いだしたけどConcurrent Cleanの標準GUIライブラリにはそういう説明が書いてあった。

wangGMSwangGMS2006/06/13 00:34mainの型についてはP254に書いてあったね。IO a。

 |