Haskell (as commonly implemented) does not have a call stack;
evaluation is based on graph reduction.
真的吗?这很有趣,因为虽然我自己从未体验过,但我读到如果你不使用严格版本的折叠函数然后强制评估无限折叠,你会得到堆栈溢出。当然,这表明存在堆栈。谁能澄清一下?
Haskell (as commonly implemented) does not have a call stack;
evaluation is based on graph reduction.
真的吗?这很有趣,因为虽然我自己从未体验过,但我读到如果你不使用严格版本的折叠函数然后强制评估无限折叠,你会得到堆栈溢出。当然,这表明存在堆栈。谁能澄清一下?
Haskell 不是“无堆栈”或类似的东西。从 Haskell 源代码生成的代码仍然具有某种符号,并且执行会显示一些堆栈跟踪,但它们与源代码的关系非常松散。以下是有关尝试简化调试/跟踪/分析的一些信息:
http://www.haskell.org/wikiupload/9/9f/HIW2011-Talk-Marlow.pdf