在我的函数式编程作业中,我被要求编写一个函数,该函数返回列表中二次方程的实数解,我使用判别式来找出它们。
所以,我的代码看起来像这样:
quadSols::Double->Double->Double->[Double]
quadSols a b c = [x1,x2]
where
x1 = (-b - sqrt d) / (2 * a)
x2 = (-b + sqrt d) / (2 * a)
d = (b * b) - 4 * a * c
现在,问题是 a = 0 的情况,其解决方案就是 x = -c/b。 我尝试过这样的事情,听起来完全错误,但我真的不知道该怎么做。
if a == 0 then quadSols a b c = [x]
然后添加到“where”部分:
x = -c / b
当尝试使用 ghci 加载它时,我得到:
parse error on input ‘=’
Failed, modules loaded: none.
谁能给我一些指导吗?
最佳答案
您可以简单地对 a == 0
的情况进行模式匹配:
quadSols :: Double -> Double-> Double-> [Double]
quadSols 0 b c = [x]
where x = -c / b
quadSols a b c = [x1,x2]
where
x1 = (-b - sqrt d) / (2 * a)
x2 = (-b + sqrt d) / (2 * a)
d = (b * b) - 4 * a * c
请注意,您必须在第二个案例之前包含第一个案例,因为案例按照声明的顺序进行匹配。
关于haskell - 当某些变量具有特定值时分配特殊情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40432108/