错误语法,导致“此值不是函数,无法应用”

时间:2019-06-04 23:12:20

标签: functional-programming f#

let compoundInterest initial monthly years (interest : decimal) =
    interest * (1.0m + interest) pown years

compoundInterest 100.0m 100.0m 5.0m 0.1m

我得到This value is not a function and cannot be applied.,我认为这是由语法错误引起的。此代码有什么问题?

1 个答案:

答案 0 :(得分:7)

函数应用程序的F#语法为:

f x

也就是说,每当编译器看到一个表达式,然后是空格,然后是另一个表达式,则编译器会将其视为函数应用程序,其中第一个表达式是函数,第二个表达式是参数。

在您的代码中,这被解析为函数应用程序:

(1.0m + interest) pown

其中(1.0m + interest)是函数,pown是参数。

后来,一旦编译器进行类型检查,就会发现(1.0m + interest)实际上不是函数,因此它抱怨:该表达式不是函数,无法应用

我不确定您要做什么,但是从变量名称看来,您似乎在尝试计算复利,为此,您试图将(1+利息)提高到年的幂。

如果该假设正确,则您尝试调用pown函数的方式是错误的。该函数需要两个参数,调用该函数的方式是先写一个函数名,然后是第一个参数,然后是第二个:

pown x y

或者,将其应用于您的代码:

pown (1.0m + interest) years