Haskell咖喱功能和括号

时间:2014-04-03 10:12:39

标签: function haskell currying

嗨,这可能是一个非常简单的问题,但我遇到了问题。我尝试使用以下公式创建根函数:

 roots a b c = ((-b + t)/a', (-b - t)/a')
 where
 t  = b ^ 2 - 4 * a * c
 a' = 2 * a

我现在正试图让它成为一个有条不紊的功能,但我似乎无法让它发挥作用这就是我所说的:

roots:: Double -> (Double -> (Double -> Double))

有人可以帮帮我吗?

谢谢!

2 个答案:

答案 0 :(得分:3)

在Haskell中,函数会自动计算。因此,你不必做任何特别的事情来使它们成为咖喱。

您的函数根类型为roots:: Double -> Double -> Double -> (Double, Double)。像这样的东西会因为蜷缩而出现问题:let a = roots 3.0

如果你的roots函数没有被curry,那么它可能有这样的类型:roots:: (Double , Double , Double) -> (Double, Double)这不是编写函数定义的正确方法。

答案 1 :(得分:0)

据我所知(但我不是专家,到目前为止只有Haskell的几个课程)获得3个输入参数并产生一个输出的函数(如在你的例子中)应该写成: / p>

roots:: Double -> Double -> Double -> Double

链中的最后一个元素(前两个)是返回类型,所有以前的元素都是输入参数类型。 这应该可以解决问题