为什么||不能用于模式匹配?

时间:2018-10-05 21:47:51

标签: syntax pattern-matching ocaml

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

let rec example = function
   | ... -> ...
   | ... || ... -> ... (* here I get a syntax error because I use ||*)

相反,我需要这样做:

let rec example1 = function
     |... -> ...
     |... | ... -> ...

我知道||的意思是OCaml中的,但是为什么我们只需要使用一个'pipe':|在模式匹配中指定'or'?

为什么通常的||无法正常工作?

1 个答案:

答案 0 :(得分:2)

||通常并不是真正意义上的“或”,而是“布尔或”,或者说是布尔或运算符。运算符对表达式求值(其操作数)进行运算。操作数和操作数也一起形成表达式,然后可以与其他运算符一起用作操作数以形成进一步的表达式,等等。

模式匹配则评估模式,这些模式既不是布尔值也不是表达式。尽管从某种意义上说,如果将模式应用于某个值或与之匹配,则模式的评估结果为true或false,但它们自己不会评估任何事情。从某种意义上讲,它们更像是运算符,而不是操作数。此外,与模式匹配的结果不仅是布尔值,而且是一组绑定。

在模式中使用||而不是|会使其含义超负荷,并且比弄清我的想法更容易造成混淆。