すごいHaskellたのしく学んでみる-その1
勉強会に参加する事や、TL上でよく見る本だったので、買ってみました。
- 作者: Miran Lipovača,田中英行,村主崇行
- 出版社/メーカー: オーム社
- 発売日: 2012/05/23
- メディア: 単行本(ソフトカバー)
- 購入: 20人 クリック: 556回
- この商品を含むブログ (37件) を見る
元々関数型には興味があったので、
Scalaもやってますが、
未だにぼやーっとしか分からないので、
これを期にHaskellデビューしてみて、
分かったことや興味深かった事をメモって行こうかなと思います。
今日勉強したこと…
- HaskellPlatformをインストールしてghciで少しいじってみた
- 関数呼び出し(前置関数、中置関数)
- 演算の優先度
- haskellのif式
なんか中途半端な所で終わってますが、気にしないw
とりあえず、
1.HaskellPlatformをインストール
ここから、自分の環境にあった物をインストールします。
HaskellPlatformは、
もっとも広く使われているコンパイラGHCやHaskellのライブラリなどが同包されているようです。
インストールしたら、早速
ghci
で対話環境を起動。
Prelude> 1*2 2 Prelude> 3*2 6 Prelude> True && False False Prelude> 2 == 3 False Prelude> 2 != 2 <interactive>:1:3: Not in scope: `!=' Prelude> 2 /= 2 False
ちょっと「へぇー」と思ったのが
- bool値の頭文字が大文字
- not equalが「/=」
では次に進んでみます。
2.関数呼び出し(前置関数、中置関数)
- 前置関数
関数名を前に置く関数(いわゆる普通に呼び出す関数) ex) max 10 20
- 中置関数
関数名を引数の間に置く関数 ex) 1 * 2 (←これの*のこと)
この言葉は初めて聞きました。
そういう名前があるんですね。(haskell特有の名前なんでしょうか?)
前置関数の例
Prelude> max 10 30 30 Prelude> min 10 20 10 Prelude> div 10 20 0 Prelude> div 20 2 10 Prelude> divMod 20 3 (6,2)
中置関数の例
Prelude> 1 + 2 3 Prelude> 2 - 1 1 Prelude> 3 * 4 12 Prelude> 10 / 2 5.0 Prelude> 10 `div` 2 5
面白いのは
- 「`(バッククオート)」を使うと前置関数を中置関数に出来る
- 「div」は結果が整数になるのに対して「/」は少数
3.演算の優先度
haskellでは、
関数の適用、が演算の中で最も高い優先度を持つそうです。
もちろん演算子にも優先度があります。
確かめてみましょう。
Prelude> succ 9 + 10 20 Prelude> succ 9 * 10 100 Prelude> succ 9 + 10 * 2 30
式と結果を見ると、
- succ
- *
- +
という優先度になっている事がわかります。
ココで一つ疑問に思いました。
「関数の適用が最も高い優先度」だとしても、「*」や「+」も関数なのでは、、、?
本にもそう書いてる。
演算子は特別扱いされるということなんでしょうか。
(※後日調べてみます)
4.haskellのif式
haskellのif式は
if 条件 then 条件にマッチした時 else 条件にマッチしない時
と、書くようです。
ここで、興味深いのは、
「else節が必須」な所です。
haskellでは、プログラムは関数の集まり、として考えます。
関数はデータをもらって結果を返します。
その結果はまた別の関数に渡されます。
なので、すべての関数はなにかしら結果を返さなければなりません。
だから、ifは必ずelseが必要で、
条件に一致しない場合の「結果」を返さなければならないのです。
なので、haskellのifは「文」ではなく、「式」なんだそうです。
これはすばらしい。うん。
というわけで、今日はここまで。
内容はうすっぺらいですが、まぁ、徐々にやってきます。。