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

这是因为你正在使用mod. 的定义mod,来自标准前奏

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, per this answer

或者,如果您只想进行整数除法,您可以将函数的签名更改为

unSum :: Int -> Int

或类似的。

于 2013-11-02T05:21:01.223 回答