今日は 第8章:入出力 IOアクションどうしをまとめる の途中 (位置 3916/11175) まで読み進めました。
やっと I/O が出てきましました。
今回は putStrLn と getLine という関数がでてきました。toUpper は既出かもしれませんがメモになかったので追記しました。
今日は 第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)
と書いたら警告は出なくなりました。
今日は、新しく出てきた関数はありませんでした。 →今まで出てきた関数
今日は 第7章:型や型クラスを自分で作ろう 再帰的なデータ構造 の途中 (位置 3305/11175) まで読み進めました。
記号文字だけを使って関数に名前をつけると、自動的に中置き関数になります。
とあったので、記号文字って具体的に何が使えるんだろうと思って
2 Lexical Structure を見てみると、
Operator symbols are formed from one or more symbol characters, as defined above (演算子シンボルは上記の一文字以上のシンボルキャラクターより構成される。)
と書いてあって、さらに
symbol → ascSymbol | uniSymbol⟨special | _ | " | '⟩ ascSymbol → ! | # | $ | % | & | ⋆ | + | . | / | < | = | > | ? | @ | \ | ^ | | | - | ~ | : uniSymbol → any Unicode symbol or punctuation
と定義されているので、Unicode のシンボルでも動くかなと思って。
infixr 5 △ (△) :: (Integral a) => a -> a -> a m △ 0 = m m △ n | n > m = n △ m | otherwise = n △ (m `mod` n)
とか書いてみると動作しました。実用上があまり意味が無いけど、∫とかΣとかも使えると、 例示用の関数を作るのには良いかもしれません。
今日は新しく出てきた関数はありませんでした。
今日は 第7章:型や型クラスを自分で作ろう 型シノニム の途中 (位置 3229/11175) まで読み進めました。
Haskell の type は C言語の typedef や Pascal の type みたいに型の同一性について複雑なルールがあるわけでなく、 alias みたいなもので簡単で良いと思いました。
今日は新しく出てきた関数はありませんでした。
https://gist.github.com/HiroshiOkada/e5d86cbb7f194243d2fb/4db7881250ac9b1528f7186cf66eab75345a9d3a
今日は 第7章:型や型クラスを自分で作ろう:型引数 の途中 (位置 2952/11175) まで読み進めました。
今まで出てきた関数 → https://gist.github.com/HiroshiOkada/e5d86cbb7f194243d2fb/4db7881250ac9b1528f7186cf66eab75345a9d3a