top page > computer > haskell > web_lecture > for_programmer > polymorphic_summary.html
更新日:
文責: 重城良国

まとめ: 多相関数

多相関数とは

多相関数とは

のどちらかまたは両方である関数だ。パラメトリック多相について学んだ。多相性は

ことによって確保される。後者は多相関数でありかつ高階関数である。

Maybe型からの値のとりだし

関数fromMaybe

動作

デフォルト値を指定してMaybe値から値をとりだす。

% ghci
Prelude> fromMaybe 0 (Just 8)
8
Prelude> fromMaybe 0 Nothing
0

定義

fromMaybe _ (Just x) = x
fromMaybe d _ = d

fromMaybe :: a -> Maybe a -> a

関数maybe

動作

デフォルト値を指定してMaybe値のなかみに関数を適用する。

Prelude> :m Data.Char
Prelude Data.Char> maybe 0 ord (Just 'c')
99
Prelude Data.Char> maybe 0 ord Nothing
0

定義

maybe _ f (Just x) = f x
maybe d _ _ = d

maybe :: b -> (a -> b) -> Maybe a -> b

そのままにする関数

関数id

動作

引数の値をそのまま返す。

Prelude> id 8
8

定義

id x = x

id :: a -> a

値を無視する関数

関数const

動作

引数として値xをとり「引数を問わずいつも値xを返す関数」を返す。2引数関数として見ると2つの引数をとり第1引数の値を返す関数となる。

Prelude> const 'c' False
'c'

定義

const x _ = x

const :: a -> b -> a

関数適用

演算子($)

動作

第1引数の関数を第2引数の値に適用する。

Prelude> recip $ 8
0.125

定義

f $ x = f x

以下のようにも定義できる。

($) = id

($) :: (a -> b) -> a -> b

関数合成

演算子(.)

動作

f . gのようにしてgの返り値をfにわたす関数を作成する。

Prelude> ((* 2) . (+ 3)) 8
22

定義

(f . g) x = f (g x)

(.) :: (b -> c) -> (a -> b) -> a -> c

引数を入れ替える

関数flip

動き

2引数関数の第1引数と第2引数をいれかえる。

Prelude> flip mod 3 8
2

定義

flip f x y = f y x

flip :: (b -> a -> c) -> a -> b -> c

2つの引数に同じ関数を適用

関数on

動作

2つの値のそれぞれに同じ関数を適用し返ってきた値を2引数関数に与える。

Prelude> ((==) `on` (`mod` 3)) 11 8
True

定義

(op `on` f) x y = f x `op` f y

on :: (b -> b -> c) -> (a -> b) -> a -> a -> c

まとめ

さまざまな多相関数をおさらいした。

「型」にもどる 「($)から(.)への置き換え」へ

正当なCSSです! HTML5 Powered with CSS3 / styling, and Semantics