为什么有些函数式语言不为函数参数使用括号?

Mik*_*ard 5 functional-programming

我一直在尝试在我的编程中采用一种函数式语言。我使用 C# 并严重依赖 LINQ 和其他函数式构造。目前我专注于榆树。

继续困扰我的一件事是函数中缺少括号。数学表达式使用它们:

f(z) = ln(z) + 1
Run Code Online (Sandbox Code Playgroud)

然而,在许多函数式语言中,这被写为:

f z = ln z + 1
Run Code Online (Sandbox Code Playgroud)

这只是一种风格,还是这里有更深层次的东西?

Gle*_*onK 4

函数式语言植根于lambda 演算,它不使用括号进行函数式应用。

这确实是一个语法问题,但应用函数的方式将括号省略是有意义的,因为具有两个参数的函数首先将最左边的参数应用于该函数,并输出第二个参数使用的函数。例如您习惯使用的功能:

add(x,y) { return x + y } 
Run Code Online (Sandbox Code Playgroud)

从功能上来说是

add x y
add :: Int->Int->Int
Run Code Online (Sandbox Code Playgroud)

其中应用 x 之后的中间步骤返回另一个函数

add 4  -- returns a function that will return 4 + y, when y is applied
add 4 :: Int->Int
Run Code Online (Sandbox Code Playgroud)

在某种程度上,这有助于避免与您所习惯的编程语言混淆,因为 add(4) 会抛出错误。它读起来更像是具有结合性的数学((add x) y)