📝
Haskellの関数(関数適用演算子($演算子)、 中置関数) 学習メモ2
関数適用演算子($演算子)
$演算子
は、以下の特性を持ち、$の右側の式全体を関数の引数として扱うことができる。
- 右結合
- 優先度が非常に低い
この特性により、入れ子になった関数呼び出し時に括弧を使用せずに、入れ子になった関数を表現できる。
右結合について
演算子の結合規則の1つで、演算子が、右から左へ評価される。
右結合の評価
-- 右結合
A $ B $ C D
-- 上記は、以下と同じ
A $ (B $ (C D))
左結合の評価
-- 左結合
A B C D
-- 上記は、以下と同じ
((A B) C) D
使用例
$演算子を使用することで、ネストされた括弧より、コードの可読性が上がる。
括弧を使用
result1 = sqrt (abs (sin (cos (tan (pi / 4)))))
$演算子を使用
result2 = sqrt $ abs $ sin $ cos $ tan $ pi / 4
メリット
関数適用演算子($演算子)を使用した場合、以下のようなメリットがある。
- ネスト下括弧が減る
- コードの可読性が上がる
- 式をより自然な形で記載できる
- データの流れを左から右へと表現できる
中置関数
以下のように、関数をバッククォート(`)で囲むことで、中置演算子(算術演算子の「+」や「-」など)として使用することができる
使用例
通常の関数呼び出し
-- 10 / 3
div 10 3
-- カートにアイテムがあるか
containsItem cart item
バッククォートを使用し中置演算子として使用
-- 10 /3
10 `div` 3
-- カートにアイテムがあるか
cart `containsItem` item
メリット
主に以下の要因で、コードの可読性が向上する。
- 数学の表現に近くなる
- 自然な英語のような表現に近くなる
参考
Discussion