【发布时间】:2014-09-30 06:04:54
【问题描述】:
在开发函数式编程语言时,是否可以使指定的匿名函数表达式等同于命名函数声明/定义?
以这种伪语言为例:
add = \ x y -> x + y -- assigned anonymous function expression
add x y = x + y -- named function declaration
我知道在非函数式语言中,两者的属性有些不同,但我想问为什么它们不能相同?是编译器的问题吗?
例如,是否有语言可以在递归方面使上述 2 等价?所以我可以使用他们的名字和他们分配的标签进行递归?
factorial = \ n -> if n = 0 then 1 else n * factorial (n-1)
factorial n = if n = 0 then 1 else n * factorial (n-1)
另见:http://www.haskell.org/haskellwiki/Declaration_vs._expression_style
【问题讨论】:
-
在哪些“非功能性”语言中是不同的,以及如何?您不能在哪种语言中使用
factorial定义中的任何一个? -
JavaScript、PHP、Python、Ruby、Haskell...当然它们有语法上的差异,例如
function、def.. 等。 -
@CMCDragonkai:在 JavaScript、Python、Haskell 中,两者没有什么不同。在 Ruby 中,
def定义了方法,因此实际上没有定义“命名函数”的语法。 -
@newacct 你叫什么函数声明?我没有说“命名函数”,我澄清说是指“命名函数声明”。此外,定义方法在某种程度上等同于具有命名空间的函数声明,以及对命名空间的封闭式引用。
-
@CMCDragonkai:你说“例如在这种伪语言中:我知道在非函数式语言中,这两者有一些不同的属性”但对于你提到的几乎所有语言来说都是错误的。跨度>
标签: function functional-programming lambda lambda-calculus