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

値を無視する関数

関数const

動作

引数の値を問わずいつも同じ値を返す関数を考える。いつも0を返す関数は

const0 _ = 0

となる。いつも文字'A'を返す関数は

constA _ = 'A'

となる。これらは「引数の値を問わずいつも値xを返す関数」としてまとめられる。

const x _ = x

[関数constの図]

関数constを使って上記2つの関数はそれぞれ以下のように書ける。

const0 = const 0
constA = const 'A'

関数constはモジュールPreludeから公開されている。

% ghci
Prelude> const 0 4492
0
Prelude> const 'A' "Hello, world!"
'A'
Prelude> const 'A' 999
'A'

使い道

関数idの使用例では割る数が0のときは割られる数をそのまま返した。ここでは割る数が0の場合には0を返そう。

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

割られる数である第2引数を省略する。「devide' 0は何を与えても0を返す関数」だ。「devide' aは引数をaで割る関数」だ。

const.hs

devide' :: Double -> Double -> Double
devide' 0 = const 0
devide' a = (/ a)

関数constはxを引数に取り「何を与えてもxを返す関数」を返す関数だ。見かたを変えてconstを2引数関数として考える。すると第2引数を無視し第1引数の値を返す関数となる。関数constの第1引数と返り値は同じ型だ。第2引数の型は関係ない。

const :: a -> b -> a

まとめ

「引数を無視しいつも同じ値を返す関数」を返す関数constを学んだ。2引数関数として見ると第2引数を無視し第1引数の値をそのまま返す関数となる。

課題

  1. 第1引数を無視し第2引数の値を返す関数const'定義せよ
  2. 上記の関数に型宣言をつけよ
  3. [挑戦問題] 関数const'をconstとidを使って作成せよ

「そのままにする関数」へもどる 「関数適用」へ

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