Распечатайте шаги оценки (перезаписи) Haskell для образовательных/учебных целей. Является ли это возможным?
Я описываю этот вопрос, используя пример из книги.
В книге Саймона Томпсона "HASKELL - сущность функционального программирования" на стр. 82 (см. изображения ниже) показаны этапы оценки для fac 4
.
Вопрос:
Можно ли использовать какой-либо инструмент или какой-нибудь "отладчик Haskell", который выписывал шаги оценки, которые использует GHCi, когда он будет оценивать значение fac 4
?
Предпочтительно в человекообразном формате для учебных и учебных целей.
Было бы также полезно иметь автоматическое объяснение для каждого этапа оценки, например, какое уравнение использовалось на этапе перезаписи.
Моя основная цель - получить более глубокое понимание того, как выполняются шаги перезаписи, когда я запускаю простые образовательные примеры Haskell (например, fac
).
Есть ли способ сделать это? Если да, то как?
![enter image description here]()
![enter image description here]()
Ответы
Ответ 1
Да и нет. Я еще не видел инструмента, который выполняет эту построчную оценку, которая изображена в вашем учебнике - главным образом потому, что программа на Haskell не "переписывает" выражения.
Однако есть инструмент, который визуализирует фактическую стратегию оценки Haskell, шаг за шагом: ghc-vis
. Вместо того, чтобы просто оценивать результат и отображать его на консоли, как это делает ghci
, он отображает графическое представление неоцененного результата - и вы можете принудительно выполнить его оценку, пока не получите примитивные значения и структуры.
В качестве примера того, что он может сделать, приведем оценку до третьего члена списка бесконечной последовательности Фибоначчи:
![0, 1 and 1 are evaluated, the rest of the list is a thunk referring back to parts of the list itself]()
Источник: раздел примеров сайта проекта. Вы должны взглянуть на все из них!
Ответ 2
Существует инструмент Lambda bubble pop, где вы можете щелкнуть мышью по этому выражению, чтобы увидеть, как выражение уменьшается. Обратите внимание, что инструмент на данный момент поддерживает только целые числа и списки, но, тем не менее, является хорошим учебным инструментом.
Снимок инструмента в действии:
![enter image description here]()
Ответ 3
Это очень запрошенная и очень полезная функция — который, насколько мне известно, недоступен нигде.: - (