计算对Haskell的兴趣

时间:2011-10-23 14:57:55

标签: haskell

函数式编程对我来说是一个新手,似乎无法理解如何将函数用作另一个函数的参数。 finalvalue应该计算一段时间后的最终值,以及2个时期后的finalvalue2。

interest :: Float -> Float -> Float
interest capital rate = capital * rate * 0.01

finalvalue :: Float -> Float -> Float
finalvalue capital rate = capital + interest capital rate

finalvalue2 :: Float -> Float -> Float
finalvalue2 capital rate = finalvalue capital rate + interest finalvalue capital rate rate

我明白了:

Couldn't match expected type `Float'
       against inferred type `Float -> Float -> Float'
In the first argument of `interest', namely `finalvalue'
In the second argument of `(+)', namely
    `interest finalvalue capital rate rate'
In the expression:
      finalvalue capital rate + interest finalvalue capital rate rate

我确定我在这里错过了一个基本点,但我不知道它是什么。

3 个答案:

答案 0 :(得分:7)

interest finalvalue capital rate rate

这里你用四个参数调用interest,第一个是函数。由于interest的第一个参数需要是Float,而不是函数,因此您会收到错误消息。

您可能打算写的是interest (finalvalue capital rate) rate,它使用两个浮点调用interest,第一个是使用finalvalue和{{capital调用的结果1}}作为参数。

答案 1 :(得分:4)

你只需要一些括号,不是吗?

finalvalue2 :: Float -> Float -> Float
finalvalue2 capital rate = 
   finalvalue capital rate + interest (finalvalue capital rate) rate

finalvalue2 :: Float -> Float -> Float
finalvalue2 capital rate = 
   finalvalue capital rate + interest finalvalue capital rate rate
                                      ^^^^^^^^^^

编译器单独使用finalvalue作为interest的第一个参数,就好像它是3.23一样,但当然它无法生成感觉。 (最好查看错误陈述中提到的确切位置,在这种情况下指向我标记的位置。)

答案 2 :(得分:1)

finalvalue2              :: Float -> Float -> Float
finalvalue2 capital rate = finalvalue capital rate + interest (finalvalue capital rate) rate