Haskell实现没有堆栈?

The*_*kle 10 continuations stack haskell stackless graph-reduction

来自无堆栈语言如何工作?

Haskell (as commonly implemented) does not have a call stack; 
evaluation is based on graph reduction.
Run Code Online (Sandbox Code Playgroud)

真?这很有意思,因为虽然我自己从未体验过它,但我已经读过,如果你不使用折叠函数的严格版本然后强制评估无限折叠,你会得到堆栈溢出.当然,这表明存在堆栈.任何人都可以澄清吗?

Jef*_*rka 8

我绝对不是这方面的专家,但我认为你引用的答案并不完全准确.Haskell没有大多数命令式语言的直接堆栈类型,您可以通过程序跟踪调用路径.由于它的懒惰,评估是基于图形缩减,您可以在这里阅读,但调用仍然最终放在堆栈中.根据这个页面,GHC的执行引擎中的"堆栈"与词汇调用栈几乎没有相似之处.所以,是的,有一个堆栈,但它与您在命令式语言中找到的堆栈非常不同,并且它是使用图形缩减创建的.