wvogel日記

自分用の技術備忘録が多めです.

中間演算子

前回Haskellで書いた、Combinationを求める関数

kaijo :: Integral a =>a->a
kaijo k = foldr (*) 1 [1..k]

combinate :: Integral a => a -> a -> a
combinate n r = (kaijo n)`div`(kaijo r * kaijo (n-r))

型クラスをまだよく理解していないのですが、コンパイラのすすめにそって、Integralを指定してみた。
初めNum=>aでやったらエラーだったんです。


そろそろちゃんと、Haskellの型クラスを学ばないとなー
あ、それで。
`div`や`mod`のように、中間演算子として関数を使うことができる。
isInfixOfとかも、中間演算子にすると普通の文法のように読めるというメリットがあるのは知ってるのですが。


これって、特に指定しなくても、自分の作った関数でも使える...よね?
と思って実験。
本来Combinationは、
10C5
のように記述します。
なので、

main = print $ 10 `combinate` 5

としてみた。
結果ちゃんと、252が返ってきた!!
やった!