Zenn
📝

Haskellの関数(関数適用演算子($演算子)、 中置関数) 学習メモ2

2025/02/05に公開

関数適用演算子($演算子)

$演算子は、以下の特性を持ち、$の右側の式全体を関数の引数として扱うことができる。

  • 右結合
  • 優先度が非常に低い
    この特性により、入れ子になった関数呼び出し時に括弧を使用せずに、入れ子になった関数を表現できる。

右結合について

演算子の結合規則の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  

メリット

主に以下の要因で、コードの可読性が向上する。

  • 数学の表現に近くなる
  • 自然な英語のような表現に近くなる

参考

https://zenn.dev/masahiro_toba/articles/6737c1cc2facb1
https://hnw.hatenablog.com/entry/20130103

Discussion

ログインするとコメントできます