Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 未解析实例声明_Haskell - Fatal编程技术网

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 ]