我很难记住在调用 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
在参数 f
、 comma
和 separated
上调用 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/