gpt4 book ai didi

Haskell 二次解查找器 - 错误

转载 作者:行者123 更新时间:2023-12-02 15:16:42 25 4
gpt4 key购买 nike

我在大学里使用 Haskell,我必须做的练习之一是创建一个函数,当我给它一个二次方程的系数时,它会给出二次方程的根,使用以前的函数告诉我它有多少解.这是我所做的:

第一个函数,这个很好用:

nRoots :: Float -> Float -> Float -> Int
nRoots a b c | r<0 = 0
| r==0 = 1
| otherwise = 2
where r = b^2-4*a*c

第二个函数,它不起作用:

roots :: Float -> Float -> Float -> [Float]
roots a b c | nRoots==2 = [(-b-sqrt(b^2-4*a*c))/(2*a),(-b+sqrt(b^2-4*a*c))/(2*a)]
| nRoots==1 = [-b/(2*a)]
| otherwise = []

这是我得到的错误:

raizes.hs:8:21:
No instance for (Eq (Float -> Float -> Float -> Int))
(maybe you haven't applied enough arguments to a function?)
arising from a use of ‘==’
In the expression: nRoots == 2
In a stmt of a pattern guard for
an equation for ‘roots’:
nRoots == 2
In an equation for ‘roots’:
roots a b c
| nRoots == 2
= [(- b - sqrt (b ^ 2 - 4 * a * c)) / (2 * a),
(- b + sqrt (b ^ 2 - 4 * a * c)) / (2 * a)]
| nRoots == 1 = [- b / (2 * a)]
| otherwise = []

raizes.hs:8:23:
No instance for (Num (Float -> Float -> Float -> Int))
(maybe you haven't applied enough arguments to a function?)
arising from the literal ‘2’
In the second argument of ‘(==)’, namely ‘2’
In the expression: nRoots == 2
In a stmt of a pattern guard for
an equation for ‘roots’:
nRoots == 2

知道发生了什么事吗??

提前致谢

编辑:感谢您的所有回答!我现在因为没有注意到它而感到很愚蠢:X

最佳答案

您没有将任何参数传递给 nRoots。您可以通过将系数传递给 nRoots

来修复错误
roots a b c | nRoots a b c ==2 = ...

错误消息告诉您没有办法检查诸如 nRoots 之类的东西(一个 Eq 实例)是否相等,它的类型为 Float -> Float -> Float -> Int,并且无法将数字 2 转换为具有相同类型的数字(没有 Num 实例)。这两个错误都是由表达式 nRoots == 2 引起的。

关于Haskell 二次解查找器 - 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39821968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com