Gue*_*OCs 1 ocaml functional-programming
我正在阅读https://ocaml.org/learn/tutorials/99problems.html它有两个例子:
# let rec last_two = function
| [] | [_] -> None
| [x;y] -> Some (x,y)
| _::t -> last_two t;;
Run Code Online (Sandbox Code Playgroud)
我理解第一个:_::t意味着模式匹配任何内容并调用它t
但在
# let rec at k = function
| [] -> None
| h :: t -> if k = 1 then Some h else at (k-1) t;;
Run Code Online (Sandbox Code Playgroud)
我不明白什么h意思。对我来说应该是_:: t -> ...匹配任何东西并调用它t
模式_ :: t并不代表你所说的。它匹配任何非空列表并调用列表的 tail t。
该模式h :: t匹配任何非空列表,调用列表的头部h(一个元素,第一个元素)和列表的尾部t(第一个元素之后的零个或多个元素)。
运算符::是列表构造函数(通常称为“cons”),这就是这些模式与列表匹配的原因。
以下是::列表构造函数的示例:
# true :: [];;
- : bool list = [true]
# 1 :: [2; 3];;
- : int list = [1; 2; 3]
Run Code Online (Sandbox Code Playgroud)
与 OCaml 中常见的情况一样,列表的模式使用与构造函数相同的语法。
# match [1;2;3] with [] -> None | h :: t -> Some (h, t);;
- : (int * int list) option = Some (1, [2; 3])
Run Code Online (Sandbox Code Playgroud)