to2yの日記

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

企画2006-06-04 - 「ふつける」勉強会 資料用 - haskell

本の記述が丁寧なので、不明点の調査経過や補足で調べたことを中心に書きます。

途中でも随時コメントOKです。

hello.hs

putStrLnの定義

mainは予約語か?

mainは予約語ではない。

ghc等でコンパイルする際に主関数であることを明示するために使用する

at 勉強

処理系が使用しているだけ

mainの型は IO a

cat.hs

getContentsの定義

do,レイアウト --> 本の記述が丁寧なので省略

countline.hs

Haskellリスト

  1. 全ての要素が同じ型でなければいけない(Scheme等のリストとは異なる。)
  2. 文字列は文字のリスト

$演算子

foo $ bar x <=> foo (bar x)

printの定義

印刷可能な任意の型を標準出力に出力

head.hs

head.hsをghciで対話的に動かしてみる。

補足:標準入力の処理がどうなるかを実験するのが目的

Ok, modules loaded: Main.
 *Main> main
1
1
2
2
3
3
...省略...
8
8
9
9
10
10
 *Main>

入力するたびに入力行が表示され、10回表示した後に処理が終了

遅延評価のせい?

at 勉強

http://www.fobj.com/hisa/diary/20060604.html#p02を参照


tail.hs

ghciで動かしてみる。

標準入力から対話的に入力しても特に何も出力されない。

^Zを入力して改行するとその時点でghciが落ちてしまい実験失敗

練習問題

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 

勉強会番外

各人の環境

sshi emacs at Linux/haskell-mode

to2y xyzzy at Win2K/haskell-mode

wangGMS eclipse-fp,meadow

HaskellGUIは?

イベント無限リストを処理するイメージらしい

勉強会の得点

mainの考察 2人(10人中)

バイト数の考察 8人(10人中)

ミステリプログラミング言語

フェアネス重視 = 強い型付け

次回

第3章 sshi 6/18

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。