OCaml: Что означают скобки, окружающие выражение [x]? - PullRequest
1 голос
/ 02 февраля 2020
(* Example #1: *)
let rec product l1 l2 =
    match l1, l2 with
    | [], _ | _, [] -> []
    | h1::t1, h2::t2 -> (h1,h2)::(product [h1] t2)@(product t1 l2);;

(* Example #2: *)
let rec rev l =
  match l with [] -> []
  |   x::xs -> rev xs @ [x];;

Что означают [h1] и [x] в приведенных выше примерах?

1 Ответ

5 голосов
/ 02 февраля 2020

Если e является выражением типа 'a, то [e] имеет тип 'a list и соответствует альтернативной записи для e :: [].

Это синтактическое c sugar также работает для списков, содержащих несколько элементов, а именно:
[a; b] является альтернативной нотацией для a :: b :: [].

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

let rec last l = 
  match l with
  | [] -> failwith "last"
  | [x] -> x
  | _ :: l -> last l
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...