2014-10-06 12 views
14

Descrivo questa domanda utilizzando un esempio tratto da un libro.Stampa dei passaggi di Haskell per la valutazione (riscrittura) a scopo didattico/di apprendimento. È possibile?

Nel libro di Simon Thompson "HASKELL il mestiere della programmazione funzionale" a pagina 82 (vedere le immagini di seguito) vengono visualizzati i passaggi di valutazione per fac 4.

DOMANDA:

E 'possibile utilizzare qualche strumento o di qualche "debugger Haskell" che scrivere le fasi di valutazione che utilizza GHCi quando sarebbe valutare il valore della fac 4?

Preferibilmente in un formato leggibile dall'uomo, per scopi didattici e di apprendimento.

Sarebbe anche utile avere una spiegazione automatica per ogni fase di valutazione, ad esempio quale equazione è stata utilizzata nella fase di riscrittura.

Il mio scopo principale è ottenere una comprensione più profonda di come vengono eseguite le fasi di riscrittura quando eseguo programmi di esempio Haskell educativi semplici (come fac).

C'è un modo per farlo? Se sì, come?

enter image description here

enter image description here

+0

[simple-reflect] (https://hackage.haskell.org/package/simple-reflect) può fare un po 'di questo. Ma mentre è utile per cose semplici come liste e mappe, non funziona per tutto. – genisage

+0

puoi convertirlo in Prolog (pazza idea;) e [tracciarlo] (http://i.imgur.com/AKCFefx.png) lì ... (mostrato è il debugger grafico di SWI-Prolog). Funziona per le cose più semplici. A proposito il libro salta alcuni passaggi (i valori non sono forzati subito, ma solo se confrontati con zero). Prolog - perché le sue regole sono anche basate sulla clausola. –

risposta

9

Sì e No. non hanno ancora visto uno strumento che fa questa valutazione line-by-line che è raffigurato nel libro di testo - soprattutto perché un programma Haskell non esegue la "riscrittura" delle espressioni

Tuttavia, esiste uno strumento che visualizza la strategia di valutazione effettiva di Haskell, passo dopo passo: ghc-vis. Invece di valutare il risultato e visualizzarlo sulla console come ghci, visualizza una rappresentazione grafica del risultato non valutato - e si può forzare la valutazione di esso thunk da thunk, fino ad arrivare ai valori e alle strutture primitive.

Come esempio di ciò che può fare, ecco la valutazione fino a quando il terzo membro della lista della sequenza di Fibonacci infinita:

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

Fonte: examples section of the project website. Dovresti dare un'occhiata a tutti loro!

+0

Può trattare con Haskell completo? Ad esempio con classi di tipi e Monade? Mi piacerebbe vedere la visualizzazione di come funzionano le monadi di stato nelle conferenze video di Brian Beckmans. – jhegedus

+0

Questo potrebbe essere ancora più educativo di vedere i passaggi di riscrittura! – jhegedus

+0

Più specificatamente, le lezioni sul video di Brian Beckman sono qui: http://channel9.msdn.com/Shows/Going+Deep/Brian-Beckman-The-Zen-of-Expressing-State-The-State-Monad). – jhegedus

1

Questa è una caratteristica molto richiesta e molto utile — che, nel miglior modo che conosco, non è disponibile ovunque. :-(

+7

"È possibile farlo?" "No." Come non risponde alla domanda? – MathematicalOrchid

+1

Ovviamente è possibile farlo. Non c'è nessuno strumento che io sappia che lo faccia per la mia soddisfazione, ma non c'è ragione per cui non potresti scriverne uno. – genisage

+0

Ovviamente è possibile vivere 100 anni con il cancro metastatico, devi solo trovare una cura per questo. Non c'è motivo per cui non potresti trovarlo. – jhegedus

10

C'è uno strumento chiamato Lambda bubble pop in cui è possibile fare clic sull'espressione per vedere come si riduce l'espressione. Si noti che lo strumento supporta solo Integer ed elenchi fin d'ora, ma tuttavia è un buon strumento educativo.

Snapshot dello strumento in azione:

enter image description here

+0

Sembra interessante. Questo tipo di supporto supporta le classi? Monadi? Tipi di dati algebrici? Sembra però di mandare in crash Safari. – jhegedus

+0

Hmmm, sembra che nessuno di questi concetti più avanzati sia ancora implementato. – jhegedus

Problemi correlati