1. ホーム
  2. haskell

[解決済み] なぜHaskellでは整数の割り算ができないのか?

2022-02-04 01:05:30

質問

このコード

(4 :: Integer) / 2

はエラーになります。

  No instance for (Fractional Integer) arising from a use of ‘/’
    In the expression: (4 :: Integer) / 2
    In an equation for ‘it’: it = (4 :: Integer) / 2

なぜ?

を指定する必要があります。

fromIntegral(4 :: Integer) / 2

を実行して結果を得ることができます。しかし、実数が必要な場合はどうでしょうか? 2.0 ?

解決方法は?

なぜなら Integer タイプには Fractional のインスタンスを作成します。

の型は (/)Fractional a => a -> a -> a . がどうなるかを考えてみましょう。 a = Integer . あなたが持っているのは Integer -> Integer -> Integer . しかし 1/2 ではなく が整数である場合、それは 0.5 . ということは、除算演算子を収めるには ラウンド となります。しかし、そこには ない 丸め方は一通りで、用途によって最適な方法が異なるため、「丸める」ではなく「丸める」を採用することになりました。 ではなく そのインスタンスを提供します。

を実行したい場合 整数分割 を使用します。 div または quot 関数を使用します(これらは異なる丸めを使用します)。 そうでなければ,次のような明確な除算をサポートするものに変換してください。 Rational (これは fromIntegral が行っている)。