en.wikibooks の Haskell から.
CC-BY-SA での配布です.
An introduction to types(小声)
Type の話だ!楽しみにしましょう!わーい!…といきたいところですが,その前に関数の話をもう少しします……
ほんとの話は次次回,今日は昨日の boolean values の一応続き.
Truth values が values というてるけど,これはマジでそういうことで, 数値と同じ意味で値を持ってる.
例えば
Prelude> True == True True Prelude> True == False Falseってな感じ.では「2 と True は等しいでしょうか?」
Prelude> 2 == True <interactive>:3:1: No instance for (Num Bool) arising from the literal `2' Possible fix: add an instance declaration for (Num Bool) In the first argument of `(==)', namely `2' In the expression: 2 == True In an equation for `it': it = 2 == Trueそんな比較はできません.上で ghci さんが何を言ってるのかは後ほど読めるようになる.
左辺は数 (type としては
Num
), 右辺は Boolean value (Bool
)型 (type) が違うので,比較のしようがないのです.
これまでは ghci が勝手に解釈してくれていましたが,自分で型を指定することもでき,
Haskell のこの型システムは,ちゃんと意味が通るように物事を動かす上で非常に強力です.
超大事で格好いいので次の章はこの型の話.その前に今の話を片付けてしまいましょう.
Infix operators
さっきの 2 と True を調べた時,In the first argument of `(==)', namely `2'さて ghc さんは 2 を first argument of (==) と呼んでるわけやけれども,この (==) も普通の函数.
ただ syntax 的にちょっと違って, Haskell ではこういう,
名前が英数以外の記号だけでできてる 2 変数関数 は中置できることになってるらしい.
infix operators, と呼ぶそうな.普通の関数みたいに使うときは ( ) でくくる.
Prelude> (==) (4 + 9) 13 True前にちょっと触れた
(+)
とかもこの類ですね.逆にさっきの
areaRect
みたいな関数を中置したい時は ` ` でくくって
2 `areaRect` 5と書ける.これではあんまり嬉しさもないけど,
3 `mod` 2
みたいな書き方は素敵そう.というわけで(?)
==
も +
も >=
もなんでもかんでも関数です.というわけで論理演算子をいくつか置いておきますので
お見知りおきを
Boolean operations
and は(&&)
, or は (||)
, not
で論理否定.いずれもさっきの infix operator な記法に従います.
Prelude> (3 < 8) && (False == False) True Prelude> (&&) (3 < 8) (False == False) True Prelude> not (5*2 == 10) Falseみたいな感じ.なお, not equal to については
/=
(\neq に形を似せたという噂?) とも書ける.あえて書くならx /= y = not (x == y)というかんじ(この書き方で完全に正しい).一瞬あれって思うかもしれないが落ち着いて.
No comments:
Post a Comment