ドットで関数を結合
人のHaskellのコードを読んでいて,色んな所で見かける".".何に使うのか(大体想像はついたけど)わからなかったので調べてみると,関数を結合する演算子という事がわかり,一つスッキリ.練習してみる.
こちらの真ん中辺りを読むと,
もとのf3( f2( f1 ) )をあらわす関数結合が f3.f2.f1ですから当然なのかも知れませんが。
ものは試しだ.とりあえず,
Hugs.Base> negate (abs 10) -10
を関数結合を使って書いてみる.
Hugs.Base> negate . abs 10 ERROR - Cannot infer instance *** Instance : Num (b -> a) *** Expression : negate . abs 10 Hugs.Base> negate . (abs 10) ERROR - Cannot infer instance *** Instance : Num (b -> a) *** Expression : negate . abs 10
う〜ん,どうすれば良いんだろう.
Hugs.Base> (negate . abs) 10 -10
こうか!幾つかの関数を結合して一つの関数と見なし,それに引数を与えるのだな.なるほど.
Hugs.Base> ((foldl1 (*)).(take 10).map (*10)) [1..] 36288000000000000
こいつぁ楽しい・・・.