Syntax 为什么| |能';不能用于模式匹配吗?
在OCaml中,当我进行模式匹配时,我无法执行以下操作: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中表示或,
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
的中缀运算符。|
运算符不处理模式。请注意,正则表达式(一种模式)以类似的方式使用|
。