3

Haskell令人惊奇的事情之一是Spineless Tagless Graph Machine (STG)。当时,(根据SPJ的说法)它是为了让函数式编程能够在当时有限的硬件上工作的惰性而编写的。随后,它被证明对函数式编程有任何额外的好处

当我们看到像Scheme这样的语言时-递归功能非常突出(就像在 Haskell 中一样)。使这个特别有效的部分原因是被称为尾呼叫消除的功能。你想要尾调用消除的原因是因为如果一个函数调用自己 1000 次,它可能会破坏堆栈,甚至堆栈溢出。[原文如此]

现在Haskell 有一些有趣Tail Call Elimination选项。我们看到的是

Haskell 的递归函数不是以非常递归的方式计算的!唯一的一堆调用是乘法本身。如果 (*) 被视为一个严格的数据构造函数,这就是所谓的受保护递归(尽管它通常被称为非严格数据构造函数,其中剩下的是数据构造函数 - 当被进一步强制时使用权)。

我的问题是:尾调用优化的 Haskell 选项是否表示 Spineless Tagless Graph-machine?

4

0 回答 0