OCaml:表达式周围的括号是什么意思[x]?

OCaml:表达式周围的括号是什么意思[x]?,ocaml,Ocaml,在上面的例子中,[h1]和[x]是什么意思?如果e是'a类型的表达式,那么[e]有一个类型的列表,并且只对应于e:[]的替代符号 这种语法糖也适用于包含多个元素的列表,即: [a;b]是a::b::[]的替代符号 另外,请注意,此符号也可在图案加工中使用,例如,返回列表最后一个元素的函数last可以这样编写: (* Example #1: *) let rec product l1 l2 = match l1, l2 with | [], _ | _, [] -> []

在上面的例子中,[h1]和[x]是什么意思?

如果
e
'a
类型的表达式,那么
[e]
有一个
类型的列表
,并且只对应于
e:[]
的替代符号

这种语法糖也适用于包含多个元素的列表,即:
[a;b]
a::b::[]
的替代符号

另外,请注意,此符号也可在图案加工中使用,例如,返回列表最后一个元素的函数
last
可以这样编写:

(* 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];;

如果
e
是类型
'a
的表达式,则
[e]
具有类型
'a列表
,并且仅对应于
e:[]
的替代符号

这种语法糖也适用于包含多个元素的列表,即:
[a;b]
a::b::[]
的替代符号

另外,请注意,此符号也可在图案加工中使用,例如,返回列表最后一个元素的函数
last
可以这样编写:

(* 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];;