1

次のコード:

unSum :: Float -> Float
unSum x = (y + y`mod`2 + 2) / 2
        where
        y = x*(x+1) / 2

WinHugs 98 にロードしようとすると、次のエラーが表示されます。

Hugs> :load "D:\\kram\\unSumme2.hs"
ERROR file:.\unSumme2.hs:2 - Instance of Integral Float required for definition of unSumme2

これの本質は何ですか、どうすればいいですか?とにかく、それが私のポルプスに役立つかどうかはわかりません。再帰性なしで x までの奇数の合計を計算したいと思います。

4

1 に答える 1

4

を使用しているからですmodStandard Preludemodからのの定義:

class  (Real a, Enum a) => Integral a  where
[...]
div, mod         :: a -> a -> a
[...]
n `mod` d        =  r  where (q,r) = divMod n d

aつまり、整数のみを含む数値型クラス Integral であることが期待されます。

Floatsに固執したい場合は、この回答に従ってmod'、 fromを使用してみてください。Data.Fixed

あるいは、整数除算だけを行いたい場合は、関数のシグネチャを次のように変更できます。

unSum :: Int -> Int

または類似。

于 2013-11-02T05:21:01.223 に答える