Syntax 为什么| |能';不能用于模式匹配吗?

Syntax 为什么| |能';不能用于模式匹配吗?,syntax,pattern-matching,ocaml,Syntax,Pattern Matching,Ocaml,在OCaml中,当我进行模式匹配时,我无法执行以下操作: let rec example = function | ... -> ... | ... || ... -> ... (* here I get a syntax error because I use ||*) 相反,我需要做: let rec example1 = function |... -> ... |... | ... -> ... 我知道,|在OCaml中表示或,

在OCaml中,当我进行模式匹配时,我无法执行以下操作:

let rec example = function
   | ... -> ...
   | ... || ... -> ... (* here I get a syntax error because I use ||*)
相反,我需要做:

let rec example1 = function
     |... -> ...
     |... | ... -> ...
我知道,
|
在OCaml中表示或,但为什么我们只需要使用一个“管道”:
|
来指定模式匹配中的“或”


为什么通常的
|
不起作用

|
并不是真正的“或”的意思,一般来说,它的意思是“布尔或”,或者更确切地说,它是布尔或运算符。运算符对表达式及其操作数的求值结果进行操作。操作数和操作数一起还可以形成表达式,这些表达式可以与其他运算符一起用作操作数,以形成进一步的表达式,依此类推

另一方面,模式匹配评估既不是布尔值也不是表达式的模式。尽管模式在某种意义上,如果应用于某个值,或者与之匹配,则会评估为真或假,但它们本身不会评估任何内容。从这个意义上讲,它们更像运算符,而不是操作数。此外,与模式匹配的结果不仅是一个布尔值,而且是一组绑定


在模式中使用
| |
而不是
|
会使其含义过载,更容易混淆而不是澄清。

|
并不是真正的“或”的意思,一般来说,它意味着“布尔或”,或者更确切地说,它是布尔或运算符。运算符对表达式及其操作数的求值结果进行操作。操作数和操作数一起还可以形成表达式,这些表达式可以与其他运算符一起用作操作数,以形成进一步的表达式,依此类推

另一方面,模式匹配评估既不是布尔值也不是表达式的模式。尽管模式在某种意义上,如果应用于某个值,或者与之匹配,则会评估为真或假,但它们本身不会评估任何内容。从这个意义上讲,它们更像运算符,而不是操作数。此外,与模式匹配的结果不仅是一个布尔值,而且是一组绑定


在模式中使用
|
而不是
|
,会使其含义过载,而且更容易混淆,而不是澄清。

因为
|
打开了一个新的case子句,而
|
只是一个类型为
bool->bool->bool>的中缀运算符。
|
运算符不处理模式。请注意,正则表达式(一种模式)以类似的方式使用
|
。因为
|
打开一个新的case子句,而
|
只是一个类型为
bool->bool->bool
的中缀运算符。
|
运算符不处理模式。请注意,正则表达式(一种模式)以类似的方式使用
|