【发布时间】:2014-08-07 13:52:29
【问题描述】:
我正在学习使用 Scala 进行函数式编程,偶然发现了 Runar Bjarnason http://youtu.be/hzf3hTUKk8U?t=17m35s 的精彩演讲
是否有语言已经解决了这个问题:
- 尾递归消除(不使用蹦床或其他 显式构造) 我知道 Scala 可以将 self call tail recursion 转换为循环,从而避免创建堆栈,但是 scala 编译器不接受 @annotation.tailrec 的递归,如 3min - 7m 的剪辑所示。
这里寻求的语言是函数式的,具有编译时类型系统,并且具有惰性求值。
回答上述问题后,我检查已回答的问题。但是很高兴知道 Bjarnason 提供的其他语言功能是否也已经由某种语言管理: - 实物参考 - 更好的类型推断 - 未装箱的函数参考
【问题讨论】:
-
Haskell 浮现在脑海中。
-
Scala 确实迭代地处理直接尾递归。但它不进行任何其他类型的尾调用优化,因此相互尾递归函数会累积激活记录。
-
它并不是真正基于意见的(除了“更好”)。这是一个客观的问题(是否存在具有这些技术特征的语言)。
-
@Paul 好吧,然后它会用more precise reason关闭
-
也许吧。我仍然认为这不是一个不合理的问题。不过,不确定是否应该问这个问题
标签: scala recursion functional-programming stack-overflow