【问题标题】:Does it make sense to call continuation-passing style the rescue for functional programming languages? [closed]将延续传递风格称为函数式编程语言的救援是否有意义? [关闭]
【发布时间】:2020-11-03 13:24:34
【问题描述】:

我不确定以下陈述是否有意义:

  1. 在函数式编程语言中调用非尾递归函数通常存在空间效率问题,因为调用堆栈不断增长。

  2. 每个非尾递归函数都可以系统地通过将函数调用转换为连续传递样式来转换为尾递归函数。

  3. 继续传递风格是函数式编程语言的拯救,因为没有它,在函数式编程语言的代码库中盛行的非尾递归函数必然会导致严重的性能问题。

【问题讨论】:

  • 你说的是递归函数吗?
  • 是的。我说的只是递归函数。

标签: functional-programming continuation-passing


【解决方案1】:

这是完全错误的。虽然每个函数都可以系统地转换为使用延续传递方式,但这并不能解决算法的空间效率问题。空间可能分配在继续闭包中而不是在执行堆栈中,但这没有区别。

(此外,这与语言是否具有功能无关。)

【讨论】:

  • 所以,你说的是延续传递风格并不能解决空间效率问题。尾递归函数能解决空间效率问题吗?或者你能为初学者详细说明一下吗?
  • 尾调用优化可防止不必要的调用堆栈增长。不多也不少。它对必要的堆栈增长无能为力,而且它绝对不能“解决空间效率问题”。
猜你喜欢
  • 2021-12-26
  • 2012-04-19
  • 2010-09-11
  • 1970-01-01
  • 2011-09-04
  • 1970-01-01
  • 2020-07-31
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多