Learn Haskell in 10 minutes
まだ、よちよちある期なので Learn Haskell in 10 minutes - HaskellWiki をやってみる。
2 Simple expressions
- 数値の計算。累乗は言語構造として取り入れられている。演算子の優先度はどうなっているのだろうか?まぁ、括弧を付ければいいのだが。
- 文字列。++ で結合。シングルクォートで2文字以上囲むとエラー。1文字ならエラーにならない。文字列ではなく、文字のコード値を表すのかな。
- 関数。引数に括弧はいらない。用意されている関数ってどんなのがあるんだろう?使い始めたばかりの言語で困るのは、文法もだけど、どういう関数がすでに用意されていて、どういう関数が用意されていないのかがわからないってことも。
3 The console
- 出力。pusStr(Ln) の引数は文字列のみ。print は数値でもOK。一行で幾つかの出力をしたい場合は、do ブロックを使う。そのときはセミコロンで区切る。
- 入力。getLine は文字列を返す。readLn は適当な型を返す。型を変換してくれるわけではないようだ。
Prelude> do { n <- readLn ; print (n + 1)} "123" *** Exception: user error (Prelude.readIO: no parse) Prelude> do { n <- readLn ; print (n + 1)} 123 124 Prelude> do { n <- readLn ; print (n ++ "1")} "123" "1231" Prelude> do { n <- readLn ; print (n ++ "1")} 123 *** Exception: user error (Prelude.readIO: no parse)
4 Simple types
- 型を定義したいときは :: を使う。同じ値を入力しても、よきにはからってくれる。ただし、無茶振りは突き返してくる。
Prelude> 5 :: Integer 5 Prelude> 5 :: Double 5.0 Prelude> 5 :: String <interactive>:1:0: No instance for (Num String) arising from the literal `5' at <interactive>:1:0 Possible fix: add an instance declaration for (Num String) In the expression: 5 :: String In the definition of `it': it = 5 :: String
- :t で型の確認。
- Int と Integer は違う。Int は少なくとも 30 bit の精度。Integer は無限大の精度。
- unit。よくわかんないけど、() と書くのもありってこと?何に使うのかは不明。
5 Structured data
6 Function definitions
- ghci でソースを読み込めば :t で型が表示できる。
Prelude Main> :t factorial factorial :: (Num a) => a -> a
見方は「関数名 :: (a の型) => 引数 -> 返り値」でいいのかな。
7 Convenient syntax
- let は一時的な名前の定義。ローカル変数みたいな感じか?
- case は複数分岐。 switch 文みたいな感じ。_ は条件に当てはまらなかった場合の処理。
9 Topics that don't fit in 10 minute limit
- この内容を10分か?目を通すならできるだろうけど、理解しながらは厳しいんじゃないのか、と unproductive programmer が言ってみる。