値が「ない」状態を判別できる
option型
type ‘a option =
None nullの代わり
| Some of ‘a
値がない状態のNoneと値がある状態のSome(v)の重ね合
わせ(共用体)。
option型は中身を取り出さない限り具体的に使えない。
これでnullチェックを忘れるという事はなくなる。
F#ではoption型が標準でサポート。
15
16.
option型で書き直してみる
let roc valuesparam offset =
option {
let! v = values
if offset >= 0 && offset < v.size() - param && param > 0 then
let! c1 = v.get(offset + param)
let! c2 = v.get(offset)
if c1 <> 0 then
return c2 / c1 * 100
}
16
様々な応用例
トランプ
type mark= Spade | Heart | Diamond | Club
type card = Joker | Card of mark * int
バイナリツリー構造
type ‘a tree = Node of ‘a tree * ‘a tree | Leaf of ‘a
整数の足し算、引き算
type expr = Const of int
| Add of expr * expr
| Sub of expr * expr
39