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

use*_*993 0 f# functional-programming

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

compoundInterest 100.0m 100.0m 5.0m 0.1m
Run Code Online (Sandbox Code Playgroud)

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

Fyo*_*kin 7

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

f x
Run Code Online (Sandbox Code Playgroud)

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

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

(1.0m + interest) pown
Run Code Online (Sandbox Code Playgroud)

(1.0m + interest)函数在哪里,pown参数在哪里。

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

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

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

pown x y
Run Code Online (Sandbox Code Playgroud)

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

pown (1.0m + interest) years
Run Code Online (Sandbox Code Playgroud)