输入“where”的解析错误
Parse Error on Input ‘where’
我正在尝试 "solve" 给定 d
的佩尔方程:x^2 - d * y^2 = 1
,或者至少我想得到最小的 x > 0
来解决方程。到目前为止,一切都很好。这是我的 Haskell 代码
minX :: Integer -> Integer
minX n | isSquare n = 1
| otherwise = minXRec [0,1,intSqrt n] [1,0,1] 0 1 (intSqrt n) n
minXRec :: [Integer] -> [Integer] -> Integer -> Integer -> Integer -> Integer -> Integer
minXRec (p0:p1:p2:x) (q0:q1:q2:y) m d a n
| p2*p2 - n*q2*q2 == 1 = p2
| minXRec [p1, p2, newA*p2+p1] [q1, q2, newA*q2+q1] newM newD newA n
where
newM = d*a-m
newD = quot (n-newM*newM) d
newA = quot (intSqrt n + newM) newD
代码的逻辑应该可以正常工作,但在编译时我得到
PE66.hs:28:9: parse error on input ‘where’
没有提供足够的信息来解决问题。
我已经尝试过将其设置为 let .. in ..
样式,但像这样,我没有让它发挥作用。
我的错误在哪里?
在 minXRec 的第二个守卫中,您没有条件测试。您将需要更改
| minXRec [p1, p2, a*p1+p0] [q1, q2, a*q1+q0] newM newD newA n
最有可能
| otherwise = minXRec [p1, p2, a*p1+p0] [q1, q2, a*q1+q0] newM newD newA n
我正在尝试 "solve" 给定 d
的佩尔方程:x^2 - d * y^2 = 1
,或者至少我想得到最小的 x > 0
来解决方程。到目前为止,一切都很好。这是我的 Haskell 代码
minX :: Integer -> Integer
minX n | isSquare n = 1
| otherwise = minXRec [0,1,intSqrt n] [1,0,1] 0 1 (intSqrt n) n
minXRec :: [Integer] -> [Integer] -> Integer -> Integer -> Integer -> Integer -> Integer
minXRec (p0:p1:p2:x) (q0:q1:q2:y) m d a n
| p2*p2 - n*q2*q2 == 1 = p2
| minXRec [p1, p2, newA*p2+p1] [q1, q2, newA*q2+q1] newM newD newA n
where
newM = d*a-m
newD = quot (n-newM*newM) d
newA = quot (intSqrt n + newM) newD
代码的逻辑应该可以正常工作,但在编译时我得到
PE66.hs:28:9: parse error on input ‘where’
没有提供足够的信息来解决问题。
我已经尝试过将其设置为 let .. in ..
样式,但像这样,我没有让它发挥作用。
我的错误在哪里?
在 minXRec 的第二个守卫中,您没有条件测试。您将需要更改
| minXRec [p1, p2, a*p1+p0] [q1, q2, a*q1+q0] newM newD newA n
最有可能
| otherwise = minXRec [p1, p2, a*p1+p0] [q1, q2, a*q1+q0] newM newD newA n