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

そのままにする関数

関数id

動作

関数idは引数と同じ値を返す。

% ghci
Prelude> id 8
8
Prelude> id "hello"
"hello"
Prelude> id 'c'
'c'
[関数idの図]

どんな型の値でも「同じ値を返す」ことはできる。つまり関数idは多相関数だ。

定義

id x = x

使い道

ひとつの使い道を示す。第1引数で第2引数を除算した値を返す関数を考える。第1引数が0のときは第2引数をそのまま返す。

devide :: Double -> Double -> Double
devide 0 b = b
devide a b = b / a

2行目は演算子の部分適用でdevide a = (/ a)となる。「devide aは引数をaで割る関数」だ。1行目の仮引数bは消せるだろうか。関数idが使える。devide 0 = idとする。「devide 0は引数をそのまま返す関数」だ。

id.hs

devide :: Double -> Double -> Double
devide 0 = id
devide a = (/ a)

仮引数を減らすとより直接的な表現になる。

% ghci id.hs
*Main> devide 6 9
1.5
*Main> devide 0 8
8.0

関数idをInteger型の値8に適用した(id 8)ときの型は

id :: Integer -> Integer

となる。文字列"hello"に適用した(id "hello")ときは

id :: String -> String

となる。[型X] -> [型X]の形だ。引数と返り値の型が同じなら良い。型変数で表現する。型変数は小文字で始まる識別子で小文字1文字を使うことが多い。型aの値を取って同じ型aの値を返す。

id :: a -> a

% ghci
Prelude> :t id
id :: a -> a

まとめ

関数idはもっとも単純な多相関数だ。引数をそのまま返す。使い道がなさそうだがけっこう使える。

課題

  1. 関数fromMaybeを関数maybeと関数idで定義せよ

「Maybe値からの値の取り出し」へもどる 「値を無視する関数」へ

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