2014-10-06 14 views
14

Ich beschreibe diese Frage anhand eines Beispiels aus einem Buch.Ausdruck der Haskell-Bewertungsschritte für Lern-/Lernzwecke. Ist es möglich?

In Simon Thompsons Buch "HASKELL das Handwerk der funktionalen Programmierung" auf Seite 82 (siehe Bilder unten) werden die Bewertungsschritte für fac 4 gezeigt.

FRAGE:

Ist es möglich, ein Tool oder eine „Haskell Debugger“ zu verwenden, die die Auswertungsschritte schreiben würde, die GHCi verwendet, wenn er den Wert von fac 4 bewerten würde?

Vorzugsweise in einem für Menschen lesbaren Format für Bildungs- und Lernzwecke.

Es wäre auch gut, eine automatische Erklärung für jeden Bewertungsschritt zu haben, z. B. welche Gleichung beim Umschreiben verwendet wurde.

Mein Hauptzweck ist es, ein tieferes Verständnis dafür zu bekommen, wie die Umschreibungsschritte ausgeführt werden, wenn ich einfache pädagogische Haskell-Beispielprogramme (wie fac) ausführe.

Gibt es eine Möglichkeit, dies zu tun? Wenn ja, wie?

enter image description here

enter image description here

+0

[einfach-reflektieren] (https://hackage.haskell.org/package/simple-reflect) kann etwas davon tun. Aber obwohl es für einfache Dinge wie Listen und Karten nützlich ist, funktioniert es nicht für alles. – genisage

+0

können Sie es in Prolog (verrückte Idee;) und [verfolgen Sie es] (http://i.imgur.com/AKCFefx.png) dort konvertieren ... (gezeigt wird der grafische Debugger von SWI-Prolog). Funktioniert für die einfachsten Dinge. Übrigens überspringt das Buch einige Schritte (die Werte werden nicht sofort erzwungen, sondern nur im Vergleich zu Null). Prolog - weil seine Regeln auch auf Klauseln basieren. –

Antwort

9

Ja und Nein. ich habe kein Werkzeug noch das macht diese Zeile-für-Zeile Auswertung zu sehen, die in Ihrem Lehrbuch dargestellt - vor allem, weil Ein Haskell-Programm führt kein "Umschreiben" von Ausdrücken durch.

Es gibt jedoch ein Tool, das Schritt für Schritt die tatsächliche Bewertungsstrategie von Haskell visualisiert: ghc-vis. Anstatt nur das Ergebnis auszuwerten und es auf der Konsole anzuzeigen, wie ghci, zeigt es eine grafische Darstellung des nicht bewerteten Ergebnisses an - und Sie können die Auswertung thunk für thunk erzwingen, bis Sie zu den primitiven Werten und Strukturen gelangen.

Als Beispiel dafür, was es tun kann, ist hier die Auswertung bis zum dritten Mitglied der Liste der unendlichen Fibonacci-Sequenz:

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

Quelle: examples section of the project website. Sie sollten sich alle ansehen!

+0

Kann es mit vollem Haskell umgehen? Zum Beispiel mit Typklassen und Monaden? Ich würde gerne die Visualisierung sehen, wie staatliche Monaden in Brian Beckmans Videovorträgen arbeiten. – jhegedus

+0

Dies könnte sogar lehrreicher sein, als die Rewriting-Schritte zu sehen! – jhegedus

+0

Genauer gesagt, Brian Beckmans Videovorlesungen sind hier: http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-The-Zen-of-Expressing-State-The-State-Monad). – jhegedus

1

Dies ist ein viel verlangt und sehr nützliche Funktion —, die so gut wie ich weiß, nicht überall verfügbar ist. :-(

+7

"Ist es möglich, dies zu tun?" "Nein." Wie beantwortet das die Frage nicht? – MathematicalOrchid

+1

Natürlich ist es möglich, dies zu tun. Es gibt kein Werkzeug, von dem ich weiß, dass es zu meiner Zufriedenheit funktioniert, aber es gibt keinen Grund, warum du es nicht schreiben könntest. – genisage

+0

Natürlich ist es möglich, 100 Jahre mit metastasierendem Krebs zu leben, man muss nur ein Heilmittel dafür finden. Es gibt keinen Grund, warum du es nicht finden kannst. – jhegedus

10

Es gibt ein Tool namens Lambda bubble pop wo Sie auf den Ausdruck klicken können um zu sehen, wie der Ausdruck reduziert wird Beachten Sie, dass das Tool ab sofort nur Ganzzahlen und Listen unterstützt, aber trotzdem ein gutes Lernwerkzeug ist.

Snapshot des Werkzeugs in Aktion:

enter image description here

+0

Sieht interessant aus. Unterstützt dies Typklassen? Monaden? Algebraische Datentypen? Scheint jedoch, Safari zum Absturz zu bringen. – jhegedus

+0

Hmmm, es scheint, dass keines dieser fortgeschritteneren Konzepte noch implementiert ist. – jhegedus

Verwandte Themen