Функция F #, как это действительно работает - PullRequest
0 голосов
/ 31 декабря 2018

Я получил такую ​​функцию.

let c = (fun a b ‐> let d = a 10 in d ‐ 4*b) (fun c ‐> c + c) 5
let x = c‐6  

Вот что я понимаю до сих пор: "fun c -> c + c" - первый аргумент для "fun ab", а "5" - второй.«let d» - это своего рода функция, которая принимает «a» и «b» и возвращает результат.Но если бы кто-нибудь мог объяснить, что именно произошло:

let d = a 10 in d ‐ 4*b

1 Ответ

0 голосов
/ 31 декабря 2018

in используется здесь как часть подробного синтаксиса .Вы можете переписать его в облегченном синтаксисе , чтобы сделать его более читабельным.Это было бы что-то вроде этого:

fun a b =
    let d = a 10
    d - 4 * b

a вызывается с 10 в качестве аргумента, а результаты присваиваются d.Позже d - 4 * b вычисляется и возвращается из функции.

Например, у вас есть a, равный fun c -> c + c, поэтому вызов его с помощью 10 возвращает 20.

20 - 4 * 5 = 0, поэтому c установлено на 0, а x будет 0 - 6 = -6.

Из F # интерактивно:

> let c = (fun a b -> let d = a 10 in d - 4*b) (fun c -> c + c) 5;;
val c : int = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...