Hatena::Grouphaskell

猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 このページをアンテナに追加 RSSフィード

2013-06-21

関数適用と関数合成

| 11:06 | 関数適用と関数合成 - 猫とC#について書く代わりにHaskellとF#について書くmatarilloの日記 のブックマークコメント

では、こんな関数があったとき

 replicate 2 (product (map (*3) (zipWith max [1,2] [4,5])))

関数合成をして、まっとうな記述をするとこう書けるらしい。

 replicate 2 . product . map (*3) $ zipWith max [1,2] [4,5]
はてなブログ

Haskell学びたてのころは、どういう発想するとこうなるのか(そしてこの書き方の何が嬉しいのか)あまりわかってなかった。

F#を学んだことによって、

 (replicate 2 << product << map (*3)) <| (zipWith max [1,2] [4,5])

という目で見ることができるようになった。

演算子の記号が違うだけでだいぶ雰囲気が変わるもんだ。

でもやっぱりF#みたいに左から書き、左から読みたいな。

(zipWith max [1,2] [4,5]) |> (map (*3) >> product >> replicate 2)

んで合成関数を再利用しないんだったらもういっそ

zipWith max [1,2] [4,5])
  |> map (*3) 
  |> product 
  |> replicate 2