Неверный синтаксис, приводящий к «Это значение не является функцией и не может быть применено» - PullRequest
0 голосов
/ 05 июня 2019
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 Ответ

7 голосов
/ 05 июня 2019

Синтаксис F # для приложения функции:

f x

То есть всякий раз, когда компилятор видит выражение, за которым следует пробел, а затем другое выражение, компилятор видит его как приложение функции, где первое выражение - это функция, а второе выражение - аргумент.

В вашем коде это анализируется как приложение функции:

(1.0m + interest) pown

, где (1.0m + interest) - функция, а pown - аргумент.

Позже, когда компилятор добирается до проверки типов, он видит, что (1.0m + interest) на самом деле не является функцией, и поэтому жалуется: это выражение не является функцией и не может быть применено

Я не совсем уверен, что вы хотели сделать, но из имен переменных похоже, что вы пытаетесь вычислить сложный процент, и для этого вы пытаетесь поднять (1 + интерес) до степени лет .

Если это предположение верно, то способ, которым вы пытаетесь вызвать функцию pown, неверен. Эта функция ожидает два аргумента, и способ ее вызова заключается в написании имени функции, за которым следует первый аргумент, а затем второй:

pown x y

Или, применив это к вашему коду:

pown (1.0m + interest) years
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...