所以,我正在学习Haskell的过程中,并且经常会遇到type/type-classes相关的错误。一些非常明显的愚蠢的错误,有些让我觉得哈斯克尔不适合我。不管怎么说,我有这样的一段代码...比较积分值和浮点值
pfactors' ps n
| p > (sqrt n) = []
| m == 0 = p : (pfactors' ps q)
| otherwise = pfactors' (tail ps) n where
p = head ps
(q, m) = divMod n p
pfactors = pfactors' primes
main = print $ pfactors 14
(一些背景:在pfactors功能应该采取一些并返回素数,这是给定数量的主要因素清单primes
是给了我这个错误素数的无限名单)
:
p47.hs:10:11:
Ambiguous type variable `a' in the constraints:
`Floating a' arising from a use of `pfactors'' at p47.hs:10:11-26
`Integral a' arising from a use of `primes' at p47.hs:10:21-26
Possible cause: the monomorphism restriction applied to the following:
pfactors :: a -> [a] (bound at p47.hs:10:0)
Probable fix: give these definition(s) an explicit type signature
or use -XNoMonomorphismRestriction
现在我明白,这是与p < (sqrt n)
部分出了问题,因为它是有什么关系唯一的部分210。如果我将其更改为p < n
一切正常,我得到正确的答案。但我真的想检查平方根,所以我该怎么做?
而且顺便说一句,这不是功课,如果感觉,这是我在上projecteuler.net解决问题第47
感谢任何帮助的尝试。
而且,请不要给我解决上述项目欧拉问题,我想尽我所能做到这一点:)。谢谢。
waw,所以这么少。我尝试使用'floor $ sqrt',但我没有把'fromIntegral',需要习惯这个东西我猜:)。是的,我必须把类型签名也:) – 2010-12-11 05:37:30