Recursion 如何以函数方式实现无限更新循环

Recursion 如何以函数方式实现无限更新循环,recursion,functional-programming,infinite-loop,Recursion,Functional Programming,Infinite Loop,我有一个内部状态,必须不断更新。在函数编程之后,状态是不可变的,循环是使用递归实现的。在假设的基于C的语言中实现这一点的示例方法如下: void RunUpdateLoop(WorldState world) { WorldState newWorld = Update(world); RunUpdateLoop(newWorld); } 然而,假设尾部递归优化没有发生,这将很快导致堆栈溢出。如何在不导致堆栈溢出的情况下以功能性方式实现这一点?如果存在尾部递归优化,生成的代码将

我有一个内部状态,必须不断更新。在函数编程之后,状态是不可变的,循环是使用递归实现的。在假设的基于C的语言中实现这一点的示例方法如下:

void RunUpdateLoop(WorldState world)
{
    WorldState newWorld = Update(world);
    RunUpdateLoop(newWorld);
}

然而,假设尾部递归优化没有发生,这将很快导致堆栈溢出。如何在不导致堆栈溢出的情况下以功能性方式实现这一点?

如果存在尾部递归优化,生成的代码将非常类似于

void RunUpdateLoop(WorldState world) {
    while(1) { world = RunUpdateLoop(world); }
}
没有

当然,你可以说这还不够功能化,但你要求的是一个过程语言的功能性解决方案。所以,我不太确定你想要什么


您总是可以在堆中使用类似堆栈的数据结构模拟调用堆栈,并自己进行尾部递归优化,但在这种情况下,它将再次崩溃为与上面非常类似的内容。

如果您想在其中进行函数式编程,为什么不使用假设语言进行尾部调用优化?这是一个纯粹的函数式编程的要求,因为在循环中需要在某个级别上递归。问题是,例如C++中,尾调用优化可能会在调试编译目标中被禁用,以及其他一组优化。我不建议严格遵守C++中的纯函数编程。这类事情尤其不适合C++,循环不递归会使它变得困难。别误会,我喜欢函数式编程,事实上,我目前的大部分活动是FP相关的,但是最好是使用你正在使用的语言,而不是尝试使用一个不太好支持的样式,而不是说C++对FP没有支持。只是这个特定的问题是一个在C++中真的不能很好工作的领域。