haskell - 当某些变量具有特定值时分配特殊情况?

标签 haskell functional-programming

在我的函数式编程作业中,我被要求编写一个函数,该函数返回列表中二次方程的实数解,我使用判别式来找出它们。

所以,我的代码看起来像这样:

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/

相关文章:

javascript - 创建一个纯函数来合并对象

oop - 函数式编程中的领域驱动设计?

c - 通过 haskell 传递 void *

haskell - 条件句中的一元表达式 - GHC 编译,cabal 拒绝

android - Android 上的 Kotlin : map a cursor to a list

clojure - 是否可以将一个函数的结果作为输入传递给 Clojure 中的两个函数?

scala - Scala 选项类型上的“tee”操作?

haskell - Haskell中如何避免重复的函数调用

Haskell 和惰性 Monads 评估

haskell - Haskell中有没有类似于列表的数据结构,可以在O(1)中替换元素?