1

次の機能を持つファイル:

type Point = (Float, Float)
type Circle = (Float, Float, Float)
getCircle :: Point -> Point -> Point -> Circle
getCircle (a, b) (c, d) (e, f) = (x, y, r)
    where
        x = ((a^2+b^2)*(f-d) + (c^2+d^2)*(b-f) + (e^2+f^2)*(d-b)) `div` (a*(f-d)+c*(b-f)+e*(d-b)) `div` 2
        y = ((a^2+b^2)*(e-c) + (c^2+d^2)*(a-e) + (e^2+f^2)*(c-a)) `div` (b*(e-c)+d*(a-e)+f*(c-a)) `div` 2
        r = sqrt ((a-x)^2 + (b-y)^2)

Hugs にロードしようとすると、エラーがスローされます。

ERROR "/Users/ak/Desktop/1.hs":4 - getCircle の定義に必要な Integral Float のインスタンス

問題の本質と解決方法は? ありがとう。

4

2 に答える 2

4

5 2ではなく-5/2の/代わりに使用する必要があります。理由は、haskellが整数型と浮動小数点型を異なる方法で処理するためです。これらは異なる型クラスのインスタンスです。divdiv

(/)typeclassで宣言されてFractionalいるのに対し、typeclassでdiv宣言されていますIntegral。これらの型クラスには共通の祖先Numがありますが、それ以外のサブタイピング関係はありません。

于 2010-09-05T19:09:29.560 に答える
2

divは整数除算であるため、インスタンスでのみ機能しIntegralます。単に使用する/

于 2010-09-05T19:09:09.717 に答える