Haskell 未解析实例声明
我有两个函数,一个用于获取与上一项不同的数字的平方根,其值为Haskell 未解析实例声明,haskell,Haskell,我有两个函数,一个用于获取与上一项不同的数字的平方根,其值为
<0.0001
,近似值很好
squareRoot n = squareRoot' (approx n)
squareRoot' ( n : n2 : ns ) | abs (n2 - n) < 0.0001 = n2
| otherwise = squareRoot' ( n2 : ns )
有人能帮我吗?谢谢除了评论中已经提到的内容之外,我认为您想使用
平方根
只得到sqrt p
,同时检查isPrime
谓词的除数,对吗
如果是这样的话,那么就不用转换和sqrt
以及你可以利用的东西了
m <= sqrt n <=> m^2 <= n
还有;)
如果您正在寻找一种方法来获得
楼层(sqrt p)
(我假设approx
是一种算法,可以让您获得一系列数字来计算根),而不是使用相同的观察结果
sqrtn :: Integer -> Integer
sqrtn n = head [ m | m <- [n,n-1..1], m^2 <= n ]
sqrtn::Integer->Integer
sqrtn n=head[m | m我想您可以使用frompintegral(abs(n2-n))来解决这个错误
。你应该给你的函数添加类型注释。这样你会看到,平方根
在Rational
typeclass中产生一些类型,而稍后你会期望一个Int
。如果你想保持简单,让平方根
返回一个Double
,并使用fromIntegral
和 floor
可根据需要将整数转换为双倍整数和反向整数。
m <= sqrt n <=> m^2 <= n
isPrime :: Integer -> Bool
isPrime 1 = False
isPrime p = null [ d | d <- takeWhile (\ m -> m^2 <= p) [2..], p `mod` d == 0 ]
λ> take 20 primes
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71]
sqrtn :: Integer -> Integer
sqrtn n = head [ m | m <- [n,n-1..1], m^2 <= n ]