我在Haskell编程,我遇到以下代码问题:
exactRootList :: Int -> Int -> [Int]
exactRootList ini end =
[x | x<-[ini .. end], (floor (sqrt x)) == (ceiling (sqrt x))]
然后,当我执行:
> hugs myprogram.hs
我得到了
Error Instances of (Floating Int, RealFrac Int) required for definition of exactRootList
我不明白这个错误。
我的程序应该在区间[a,b]上显示具有精确根为4或9的数字列表,其中a和b是函数的两个参数。 例如:
exactRootList 1 10
必须返回
1 4 9
因为1到10之间只有1,4和9具有确切的根。
问候!
答案 0 :(得分:6)
如果您查看sqrt
的类型,您会看到它仅适用于Floating
实例的类型:
> :t sqrt
sqrt :: Floating a => a -> a
您可能知道,Int
不是浮点值。您需要使用x
转换您的整数(变量fromIntegral
):
[x | x<-[ini .. end], let a = fromIntegral x
in (floor (sqrt a)) == (ceiling (sqrt a))]