所以nroots是一个函数,它根据增量值返回多项式的根数。 然后,我创建了一个函数,该函数返回多项式根的实际值。如果nroots等于1,则roots返回一个包含1个项目的列表;如果nroots等于2,则返回具有2个itens的列表。 但是,当我尝试编译它时,总是出现错误:输入'x1'上的解析错误 这是我的代码:
module Main where
main = do putStrLn "Hello World"
nroots :: Int -> Int -> Int -> Int
nroots a b c = if delta > 0 then 2
else if delta == 0 then 1
else 0
where
delta = b^2 - 4*a*c
roots :: Int -> Int -> Int -> [Double]
roots a b c = if n > 0 then [x1,x2]
else if n ==0 then [x1]
else []
where
n = nroots a b c
delta = b^2 - 4*a*c
x1 = (-b +sqrt(delta))/2*a
x2 = (-b -sqrt(delta))/2*a
答案 0 :(得分:2)
Haskell是 strong 的类型。这意味着它不会隐式将Int
转换为Double
。因此,您无法构造类似(-b + sqrt delta)/(2*a)
的表达式。
您可以使用fromIntegral :: (Integral i, Num n) => i -> n
从Int
转换为Double
:
roots :: Int -> Int -> Int -> [Double]
roots a b c = if delta > 0 then [x1,x2]
else if delta == 0 then [x1]
else []
where
delta = b*b - 4*a*c
sqdelta = sqrt (fromIntegral delta)
x1 = -0.5*(fromIntegral b + sqdelta) / fromIntegral a
x2 = -0.5*(fromIntegral b - sqdelta)/ fromIntegral a
答案 1 :(得分:0)
您正在混合空格和制表符。 delta
缩进两个标签,x1
缩进一些空格。不要那样做。