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

関数適用

演算子($)

動作

演算子($)は関数を値に適用する。f $ xとするとxにfを適用する。f xと同じだ。逆数を求める関数recipで形してみよう。

% ghci
Prelude> recip 8
0.125

[単純な関数の図]

Prelude> recip $ 8
0.125

[演算子applyの図]

Prelude> ($) recip 8
0.125

[関数applyの図]

定義

f $ x = f x

使い道

f $ xがf xと同じならf xと書けば良い。演算子($)は何のためにあるのだろう。いくつかの答えがある。ひとつは「丸括弧の省略」だ。recip (1 + 3)のような表現をrecip $ 1 + 3に書きかえられる。複雑な表現ではこの書きかえでコードが読みやすくなる。($)は結合力が最弱で右結合だ。f $ ...とあれば...の部分が全体としてfの引数になっていることが保証される。

($) recip 8

関数recipの型をDouble -> Double、値8をDoubleと考える。($)はDouble -> DoubleとDoubleを引数としDoubleを返す。

($) :: (Double -> Double) -> Double -> Double

oddは「奇数である」ことを確認する関数だ。整数をとって真偽値を返す。

($) odd 11

oddをInteger -> Boolとし11をIntegerとする。

($) :: (Integer -> Bool) -> Integer -> Bool

($)の第1引数である関数の引数と($)の第2引数の型は同じだ。($)の第1引数である関数の返り値と($)の返り値も同じだ。それぞれ型変数a, bで表す。

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

まとめ

関数適用演算子($)を学んだ。f $ xで値xに関数fを適用する。不要な演算子のようだが丸括弧の数を減らすのに使える。

課題

  1. recip ((3 + 5) / 2)を演算子($)で書き直せ
  2. 第1引数の値に第2引数の関数を適用する関数applyを定義せよ
  3. [挑戦問題] 演算子($)と関数idの関係について考えよ

「値を無視する関数」へもどる 「関数合成」へ

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