如何以功能方式实现无限更新循环

时间:2014-09-08 02:46:00

标签: recursion functional-programming infinite-loop

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

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

但是,这很快就会导致堆栈溢出(假设尾递归优化不会发生)。如何以功能的方式实现这一点而不会导致堆栈溢出?

1 个答案:

答案 0 :(得分:0)

如果存在尾递归优化,则生成的代码与

类似
void RunUpdateLoop(WorldState world) {
    while(1) { world = RunUpdateLoop(world); }
}

没有

当然你可以说它不够“功能”,但你要求用程序语言提供“功能性”解决方案。所以,不太清楚你在追求什么。

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