我一直在尝试将函数式语言引入我的编程中。我使用C#,并且大量依赖于LINQ和其他函数式结构。目前我正在专注于Elm。
有一件事情仍然困扰着我,那就是函数中缺少括号。数学表达式使用它们:
f(z) = ln(z) + 1
然而在许多函数式编程语言中,这被写成:
f z = ln z + 1
这仅仅是一个样式问题还是有更深层次的东西在这里发生了?
我一直在尝试将函数式语言引入我的编程中。我使用C#,并且大量依赖于LINQ和其他函数式结构。目前我正在专注于Elm。
有一件事情仍然困扰着我,那就是函数中缺少括号。数学表达式使用它们:
f(z) = ln(z) + 1
然而在许多函数式编程语言中,这被写成:
f z = ln z + 1
函数式语言起源于lambda演算,它不使用括号进行函数应用。
这是一种语法上的问题,但是由于函数应用的方式,省略括号是有道理的,因为一个带有两个参数的函数首先将最左边的参数应用于该函数,并输出一个由第二个参数使用的函数。例如,您习惯使用的函数:
add(x,y) { return x + y }
add x y
add :: Int->Int->Int
add 4 -- returns a function that will return 4 + y, when y is applied
add 4 :: Int->Int
((add x) y)
。我们看到的很多符号都受到数学的影响,我至少见过两种在数学中用于表示定义域到值域映射的函数符号。
f(x) = x + 1 和 x -> x + 1
所以我猜没有括号的编程语言可能是从后者演变而来的。
f(arg ...)
,然后你有Lisp方言(Scheme、Common Lisp、Arc)使用(f arg ...)
,我们有SASL方言(Haskell)使用f arg: args =
。我错过了什么吗?所有使用f(arg)
的不同语言在哪里,或者我们只谈论基于Fortran的方言? - Sylwester