我想要一个简单的整数分区,我在Hugs中得到这个
Hugs> :load prog.hs
ERROR file:prog.hs:30 - Instance of Fractional Int required for definition of lastf
我的简单程序就像这样
lastf::Int->Int
lastf 1 = 0
lastf n = if even n then (2*n+1) else (n/2)
我做错了什么?我怎样才能简单地进行划分?
答案 0 :(得分:5)
如果要进行整数除法,只需使用div
:
lastf n = if even n then 2 * n + 1 else n `div` 2
原因是因为Int
未实现/
运算符,因此会为Fractional
类型保留,例如Float
和Double
。显然,如果您执行3 / 2
并希望1.5
返回,则无法将其表示为Int
,您必须使用Float
或{{1 (或实现Double
类型类的任何类型)。