haskellで割り算するとき
haskellでコードを書いていて数値の計算を行うときにエラーが出て調べることが多いのでメモしとく
例えば、整数同士を割り算してから少数部分を切り上げたいとき以下の形だとエラーになる
myceiling :: Int -> Int -> Int myceiling m n = ceiling $ m / n
これは/がIntに対しては適用できないため
ceilingと/の型は以下
*Main> :t (/) (/) :: Fractional a => a -> a -> a *Main> :t ceiling ceiling :: (Integral b, RealFrac a) => a -> b
よって/によって割り算する場合は2引数ともFractionalのインスタンスの必要がある
そこで使うのがfromIntegral
*Main> :t fromIntegral fromIntegral :: (Integral a, Num b) => a -> b
これによってIntをNumとして扱うことができ、それに/を適用することでhaskellが型推論によって
Fractionalとして扱ってくれる。つまりこのようにすればよい
myceiling :: Int -> Int -> Int myceiling m n = ceiling $ (fromIntegral m) / (fromIntegral n)
- 作者: Miran Lipovaca
- 出版社/メーカー: オーム社
- 発売日: 2012/09/21
- メディア: Kindle版
- 購入: 4人 クリック: 9回
- この商品を含むブログを見る