ドットで関数を結合

人の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

こいつぁ楽しい・・・.