Подтвердить что ты не робот

Распечатайте шаги оценки (перезаписи) Haskell для образовательных/учебных целей. Является ли это возможным?

Я описываю этот вопрос, используя пример из книги.

В книге Саймона Томпсона "HASKELL - сущность функционального программирования" на стр. 82 (см. изображения ниже) показаны этапы оценки для fac 4.

Вопрос:

Можно ли использовать какой-либо инструмент или какой-нибудь "отладчик Haskell", который выписывал шаги оценки, которые использует GHCi, когда он будет оценивать значение fac 4?

Предпочтительно в человекообразном формате для учебных и учебных целей.

Было бы также полезно иметь автоматическое объяснение для каждого этапа оценки, например, какое уравнение использовалось на этапе перезаписи.

Моя основная цель - получить более глубокое понимание того, как выполняются шаги перезаписи, когда я запускаю простые образовательные примеры Haskell (например, fac).

Есть ли способ сделать это? Если да, то как?

enter image description here

enter image description here

4b9b3361

Ответ 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

Это очень запрошенная и очень полезная функция — который, насколько мне известно, недоступен нигде.: - (