🙂
[Haskell勉強中]:割り算でハマった話
Haskellで割り算の計算結果を使おうとしたところ、怒られてしまいました。
ghci> length [1, 2, 3] / 3
<interactive>:239:18: error:
? No instance for (Fractional Int) arising from a use of ‘/’
? In the expression: length [1, 2, 3] / 3
In an equation for ‘it’: it = length [1, 2, 3] / 3
なんでやー
この計算は出来るのに…
ghci> 3 / 3
1.0
他の方のブログで、上記の場合は「実数」として処理しているからだ。という解説がありました。
同じ3でも型の扱いが違うということなのかもしれません。
Haskellは数字の型が厳しいようですね。
エラーメッセージ的には、割り算の関数 (/) は、Fractional型(分数?)と Int を同時に扱えないよ。ということなのかもしれません。
※ドキュメントを読んでも理解しきれず…
ちなみに下記なら大丈夫です。
ghci> length [1, 2, 3] `div` 2
1
div 関数は、整数(Integer)の割り算を扱えるようです。(小数点以下は切り捨て)
Haskellは数字の型が多いなぁ
Discussion