今日は 第9章:もっと入力、もっと出力 ファイルの読み書き の途中 (位置 4341/11175) まで読み進めました。
ファイルハンドルを使ってファイルを読む関数がでてきました。
そういえば getContents も hGetContents も IO String を返すので、テキストとしてファイルを読み込むようだけれど、バイナリー読み込みとかはどうなっているのだろう。
今日は 第9章:もっと入力、もっと出力 ファイルとストリーム の途中 (位置 4146/11175) まで読み進めました。
getContents の動作が ghc でコンパイルした場合は行バッファが効いていて、一行ごとの入力だったのに対して ghci 上では一文字ずつ処理されるようで違っていました。
今日も I/O 系の関数が幾つか出てきました。
昨日はさぼってしまいました。
今日は 第8章:入出力 いくつかの便利なI/O関数 の途中 (位置 4056/11175) まで読み進めました。
なかなかコードを読めるようになれません。
例えば
unwords.map reverse.words
は unwords.(map reverse).words
と同等なのですが、
括弧なしでは、.
のほうが結合が高く見えてしまって、コードの理解に手間取ります。
I/O 関係で幾つか新しい関数が出てきましたが、これらに関しては比較的簡単に理解できました。
今日は 第8章:入出力 IOアクションどうしをまとめる の途中 (位置 3916/11175) まで読み進めました。
やっと I/O が出てきましました。
今回は putStrLn と getLine という関数がでてきました。toUpper は既出かもしれませんがメモになかったので追記しました。
今日は 第7章:型や型クラスを自分で作ろう Functor 型クラス の途中 (位置 3705/11175) まで読み進めました。
型クラスについては、まだ十分に理解できていない感じです。
今日は fmap という関数がでてきました。
昨日はさぼってしまいました。
今日は 第7章:型や型クラスを自分で作ろう YesとNoの型クラス の途中 (位置 3582/11175) まで読み進めました。
今日はあらたに id という関数がでてきました。「与えられた引数一つをそのまま帰す」という関数です。
今まで出てきた関数 → https://gist.github.com/HiroshiOkada/e5d86cbb7f194243d2fb/bccf9ce5efc81fcd572562d40371f79d66242244
今日は 第7章:型や型クラスを自分で作ろう 再帰的なデータ構造 の終わり (位置 3379/11175) まで読み進めました。
{-# OPTIONS -Wall #-} data Tree a = EmptyTree | Node a (Tree a) (Tree a) deriving(Show) singleTon :: a -> Tree a singleTon x = Node x EmptyTree EmptyTree treeInsert :: (Ord a) => a -> Tree a -> Tree a treeInsert x EmptyTree = singleTon x treeInsert x (Node a left right) | x == a = Node x left right | x < a = Node a (treeInsert x left) right | x > a = Node a left (treeInsert x right)
とすると
inarytree.hs:9:1: Warning: Pattern match(es) are non-exhaustive In an equation for `treeInsert': Patterns not matched: _ (Node _ _ _) Ok, modules loaded: Main.
という警告が出て、少し悩みました。 結局ガードの最後の部分が otherwise でなかったのが原因のようで、
treeInsert :: (Ord a) => a -> Tree a -> Tree a treeInsert x EmptyTree = singleTon x treeInsert x (Node a left right) | x == a = Node x left right | x < a = Node a (treeInsert x left) right | otherwise = Node a left (treeInsert x right)
と書いたら警告は出なくなりました。
今日は、新しく出てきた関数はありませんでした。 →今まで出てきた関数