在以下函数中,它反转数组/列表:
let rec rev l =
match l with
[] -> []
| h::t -> rev t @ [h];;
我们会注意到以下行之前有一个管道|
:
h::t -> rev t @ [h];;
我想知道是否有人能够解释这个垂直条|
在OCaml中的用途,以及其他用途?谢谢。
答案 0 :(得分:3)
在您的示例中,它充当多选语句的模式分隔符,类似于C语言中case
语句的switch
。
let is_vowel c = match c with
'a' | 'e' | 'i' | 'o' | 'u' -> true
| _ -> false ;;
function is_vowel(c){
switch(c){
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
return true;
default:
return false;
}
}
这两段代码会生成相同的输出,但 这是相似性结束 的地方。我发现this文档非常有帮助,它更详细地说明了您可以或不可以匹配的其他内容。
管道操作员的其他用途是:
type typ = N1 | N2 | N3
type typ = N1 of typ1 | N2 of typ2
答案 1 :(得分:-1)
它分离了模式匹配的情况。