Haskell函数调用中的括号

Zoe*_*wll 3 haskell function function-call

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

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

Ben*_*Ben 5

在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,separatedargs,同时f comma (separated args)意味着调用separated传递它args,并调用f传递它comma和调用的结果separated.

没有必要((((f) comma) separated) args); 其实你会看到,作为如何解释f comma separated args由语言,当您使用认可的括号.它将每个子表达式包装在显式括号中,因此没有歧义来向您显示默认值,而不是说您实际上需要所有这些括号.