Haskell高阶函数

时间:2017-07-09 12:01:19

标签: haskell

我对高阶函数有点混淆,我想做一个愚蠢的例子,看看我是否理解得很好,但我仍然无法编译而没有错误,即我想我错过了一些东西。我的基本示例如下,我创建了一个函数,它将两个数字相加,然后我创建了另一个函数,它使用我之前的函数并总结另一个数字。

Sum2 :: Double -> Double -> Double  
Sum2  a b = a + b

Sum3 :: (Double -> Double -> Double) -> Double -> Double    
Sum3 a b c = (Sum2 a b) + c


test1:: Double
test1 = Sum3 2.0 3.0 4.0

1 个答案:

答案 0 :(得分:1)

毫无疑问,但我猜这个OP想要解释为什么这不起作用:

Sum3 :: (Double -> Double -> Double) -> Double -> Double    
Sum3 a b c = (Sum2 a b) + c

首先,函数应该具有小写名称。其次,上面的类型是具有两个参数的函数的类型:

sum3 :: (Double -> Double -> Double) -> Double -> Double    
        ----- first arg ------------    -2nd--    -result type-

所以,应该写一下

sum3 f a = ...

其中f是作为第一个参数Double -> Double -> Double传递的函数,a是第二个参数编号。由于f是一个带有两个参数的函数,我们需要相应地使用它,例如

sum3 f a = f a a
-- or
sum3 f a = f a 12
-- or
sum3 f a = f (a+12) (f 32 a)

我不知道你想要达到的目标,上面只是例子。

最后,名称sum3不直观,我们应该使用别的东西。