gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 17:46:42 26 4
gpt4 key购买 nike

在 Haskell 中,每个运算符都被视为双参数函数的语法糖(一元减号除外,这是一个词法级别的异常(exception))。

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

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

最佳答案

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

op ::= opSymbol* | `identifier`

关于haskell - 为什么运算符/函数转换不可逆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54924462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com