119得票8回答
什么是弹跳函数?

最近在工作中的讨论中,有人提到了“弹跳函数”。 我已经阅读了维基百科上的描述(链接),对其功能有了一个大致的了解,但我希望得到更加具体的内容。 你是否有一个简单的代码片段可以说明弹跳函数的作用?

55得票3回答
如何理解JavaScript中的"trampoline"?

这是代码:function repeat(operation, num) { return function() { if (num <= 0) return operation() return repeat(operation, --num) } } ...

21得票3回答
一些实现尾调用优化的好方法是什么?

我用 C/C++ 的混合方式编写了一个小的 Scheme 解释器,但是我还没有实现 proper tail calls 。 我知道经典的 Cheney on the MTA algorithm ,但是是否有其他好的方法来实现这个呢?我知道我可以将 Scheme 堆栈放在堆上,但仍然不是 p...

20得票2回答
如何使用尾调用?

如果我理解正确,scala.util.control.TailCalls可以通过使用跳板来避免非尾递归函数的堆栈溢出。 API中给出的示例很简单:import scala.util.control.TailCalls._ def isEven(xs: List[Int]): TailRec[...

20得票2回答
为什么 Haskell 不需要使用 Trampolining?

作为Scala开发人员,学习IO Monad以及递归时必需的Trampolining技术细节,特别是在无法进行尾调用优化的情况下,我想知道Haskell是如何本地避免它的。我知道Haskell是一种惰性语言,但我想知道是否有人可以详细解释一下。例如,为什么ForeverM在Scala中不会导致...

15得票2回答
如何为Hook创建一个trampoline函数

我对钩子很感兴趣,决定尝试一下能否钩住一些函数。我不想使用像Detours这样的库,因为我想要亲自尝试一下。通过在网上找到了一些资源,我成功地编写了下面的代码。它很基础,但工作得还不错。然而,在挂钩被多个线程调用的函数时,它证明是极不稳定的。如果两个调用几乎同时进行,它就会崩溃。经过一些研究,...

11得票3回答
Scalaz中的Applicative和单子组合器以及自由单子。

几周前Dragisa Krsmanovic提出了一个问题, 关于如何使用Scalaz 7中的自由单子来避免在这种情况下发生堆栈溢出(我稍微改编了他的代码): import scalaz._, Scalaz._ def setS(i: Int): State[List[Int], Unit]...

10得票2回答
使用Trampolines在Scala中对无限结构进行FoldRight

我们先来简单地定义一下foldRight: def foldRight[T, U](base: U)(f: (T, => U) => U)(as: Seq[T]): U = { as match { case Nil => base case head ...

9得票2回答
MonoDevelop设置以修复“ran out of trampolines type 2”错误

我们正在开发一款iOS应用程序。当我们在PC上测试应用程序时,一切都很正常,但是当我们在iPad / iPhone4上运行它时,经常会收到“Ran out of Trampolines type 2”错误消息,导致应用程序崩溃。我们已经花了几天时间试图找出原因/修复它,并尝试了网络上所有的建议...

9得票3回答
如何将跳板适应于Continuation Passing Style?

这是一个天真的右折叠实现: const foldr = f => acc => ([x, ...xs]) => x === undefined ? acc : f(x) (foldkr(f) (acc) (xs)); 这是非尾递归,因此我们不能应用...