代码之家  ›  专栏  ›  技术社区  ›  Paul Johnson

为什么运算符/函数转换不可逆?

  •  0
  • Paul Johnson  · 技术社区  · 6 年前

    我可以通过将运算符括在括号中将其转换为函数,如下所示:

    Prelude> (+) 3 4
    7
    

    同样地,我可以通过将两个参数的函数用反勾号括起来,使其成为运算符:

    Prelude> 3 `max` 4
    4
    

    为什么我不能两个都做?

    Prelude> (`max`) 3 4
    <interactive>:3:7: error: parse error on input ‘)’
    
    Prelude> 3 `(+)` 4
    <interactive>:4:4: error: parse error on input ‘(’
    

    第一种情况尤其令人震惊,因为以下情况确实有效:

    Prelude> (`max` 3) 4
    4
    
    0 回复  |  直到 6 年前
        1
  •  10
  •   Li-yao Xia    6 年前

    每次你写信 (`max`) ,你也可以写 max . 每次你写信 `(+)` + . 使运算符或标识符的语法递归会给解析器增加复杂性,但没有任何好处。

    op ::= opSymbol* | `identifier`