Вызов однопараметрической функции с двумя аргументами? - PullRequest
0 голосов
/ 26 апреля 2020

У меня есть этот код:

type Sym = (string * float) list

let rec lookup v = function
  | (v', k) :: vtab -> if v = v' then k else lookup v vtab
  | (_ : Sym)    -> failwith ("unbound: " + v)

Мне кажется, lookup принимает один аргумент v. Но тогда мы делаем lookup v vtab - теперь кажется, что два аргумента передаются lookup? Как это может быть допустимо, если lookup принимает только один аргумент?

1 Ответ

2 голосов
/ 26 апреля 2020

Требуется два параметра. Первый из них - v, второй - из function.

В F # function - это syntacti c сахар для match. В частности, слово function означает fun x -> match x with.

Таким образом, вы можете прочитать свой код как:

let rec lookup v = fun x -> match x with
  | (v', k) :: vtab -> if v = v' then k else lookup v vtab
  | (_ : Sym)    -> failwith ("unbound: " + v)

Что, в свою очередь, совпадает с:

let rec lookup v x = match x with
  | (v', k) :: vtab -> if v = v' then k else lookup v vtab
  | (_ : Sym)    -> failwith ("unbound: " + v)
...