function - Haskell 函数调用中的括号

标签 function haskell function-call

我很难记住在调用 Haskell 函数时如何使用括号。我来自 C 风格的背景,我习惯于调用函数的 f(comma, separated, args) 语法。显然这与(在 Haskell 中)((((f) comma) separated) args) 相同,但这只是令人困惑。

为什么我需要所有这些括号?

最佳答案

很容易记住 Haskell 中有关括号和函数调用的规则:没有任何规则,因为括号有 与函数调用无关!

Haskell 中函数调用的基本语法是将术语彼此相邻编写: function argument 正在调用 function ,并将其传递给 argument 。在类似 C 的语法中,您可以将其写为 function(argument) 。您的 C 示例 f(comma, separated, args) 将在 Haskell 中编写为 f comma separated args

Haskell 仅以在高中数学中使用的方式使用括号:用于对子表达式进行分组,以便获得不同的调用结构。例如,在数学中 1 + 2 * 3 会在 2 和 3 上调用 *,并在 1 和 + 调用的结果上调用 *(1 + 2) * 3 更改分组,以便在 1 和 2 上调用 +,并在该结果和 3 上调用 *。同样是有效的 Haskell(和 C),具有相同的含义,但像这样分组的括号也可用于分组带有普通函数而不是中缀运算符的表达式。例如 f comma separated args 在参数 fcommaseparated 上调用 args ,而 f comma (separated args) 意味着调用 separated 传递它 args ,并调用 f 传递它 comma 和调用的结果 separated
不需要 ((((f) comma) separated) args) ;事实上,当您使用 没有 括号时,您会看到这是对语言如何识别 f comma separated args 的解释。它将每个子表达式都包含在显式括号中,因此可以明确地向您展示默认值是什么,而不是说您实际上需要所有这些括号。

关于function - Haskell 函数调用中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43062517/

相关文章:

javascript - init后直接调用函数

python - 如何使用相同的参数正确调用多个函数?

haskell - 小型命令式语言的解释器

haskell - 始终保证`seq`的评估顺序(此外还有`pseq`的奇怪行为)

c++ - 为什么 VS2013 将函数调用编译成两条指令而不是一条?

c++ - 函数调用不会多次工作,Raspbian 上的 C/C++

jquery - 迭代无序列表时跳过第一个列表项。 jQuery

javascript - 如何在 JS/React 中从外部访问嵌套函数?

list - 在 Haskell 中配对相邻列表项

c++ - 关于函数调用中的异常安全