函数式编程对我来说是一个新手,似乎无法理解如何将函数用作另一个函数的参数。 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
我确定我在这里错过了一个基本点,但我不知道它是什么。
答案 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