打印出Haskell的评估(重写)步骤,用于教育/学习目的。可能吗?

时间:2014-10-06 10:45:46

标签: debugging haskell evaluation

我用一本书中的例子来描述这个问题。

在Simon Thompson的书中,第82页的“HASKELL函数式编程技巧”(见下图)显示了fac 4的评估步骤。

问题:

是否可以使用某些工具或一些“Haskell调试器”来编写GHCi在评估fac 4的值时使用的评估步骤?

最好是人类可读的格式,用于教育和学习目的。

对每个评估步骤进行一些自动解释也是很好的,例如在重写步骤中使用了哪个等式。

我的主要目的是更深入地了解在运行简单的教育Haskell示例程序(如fac)时如何执行重写步骤。

有办法做到这一点吗?如果是,怎么样?

enter image description here

enter image description here

3 个答案:

答案 0 :(得分:10)

有一个名为Lambda bubble pop的工具,您可以在其中单击表达式以查看表达式如何减少。请注意,该工具仅支持整数和列表,但仍然是一个很好的教育工具。

该工具的快照:

enter image description here

答案 1 :(得分:10)

是和否。我还没有看到一个工具,它在您的教科书中描述了这种逐行评估 - 主要是因为Haskell程序没有“重写”表达式。

但是,有一个工具可以逐步可视化Haskell的实际评估策略:ghc-vis。它不是仅仅评估结果并在控制台上显示ghci,而是显示未评估结果的图形表示 - 你可以强制通过thunk评估它,直到你得到原始值和结构。

作为它能做什么的一个例子,这是评估直到无限斐波那契序列的第三个列表成员:

0, 1 and 1 are evaluated, the rest of the list is a thunk referring back to parts of the list itself http://felsin9.de/nnis/ghc-vis/fib1.svg

来源:examples section of the project website。你应该看一下所有这些!

答案 2 :(得分:2)

这是一个非常有用且非常有用的功能 - 据我所知,这在任何地方都无法使用。 : - (