にハスケルの減少のステップを表示するには、どのような方法があり、すなわちが行わ再帰関数呼び出しをトレース?例えば、chezスキームはtrace-lambdaを提供します。ハスケルに相当するフォームがありますか?それは場合に役立ちます見る削減ステップハスケル
答えて
Debug.Trace.trace
をトレースしたい場所に挿入してみることもできますが、トレースステートメントが遠くまで評価されていないサンクに属する可能性があるため、(a) (まだ)評価されていなかったものを評価する必要がある場合は、プログラムの実行時の動作を変更します。
は、デバッグのために、このですか?そうであれば...
Hat実行後に表示できる出力トレースにソースコードを変更します。出力は、あなたが望むものにかなり近いようになります。自分のホームページ上の例では、例えば
で、障害のあるプログラム
main = let xs :: [Int] xs = [4*2,5 `div` 0,5+6] in print (head xs,last' xs) last' (x:xs) = last' xs last' [x] = x
の計算は、結果
(8, No match in pattern.
を与え、次のようにハット表示ツールは、その動作を探索するために使用することができます:
- 中断された計算のためハットスタック
、そのエラーメッセージで終了または中断された計算され、帽子スタックとは、計算が中止された呼び出し機能を示しています。これは、関数呼び出しの仮想スタック(redexes)を表示することによって行われます。したがって、スタック上に表示されるすべての関数呼び出しは、その上に関数呼び出しを引き起こしました。最上位のスタック要素の評価によってエラーが発生しました(または評価中に計算が中断されました)。表示されるスタックは、実際のランタイムスタックに対応していないため、仮想です。実際のランタイムスタックはレイジー評価を可能にするが、仮想スタックは熱心な(厳密な)評価に使用されるスタックに対応する。
:上記と同じサンプル・プログラムを使用し$ ghci -fbreak-on-exception GHCi, version 6.10.1: http://www.haskell.org/ghc/ :? for help Loading package ghc-prim ... linking ... done. Loading package integer ... linking ... done. Loading package base ... linking ... done. Prelude> :l Example.hs [1 of 1] Compiling Main (Example.hs, interpreted) Example.hs:5:0: Warning: Pattern match(es) are overlapped In the definition of `last'': last' [x] = ... Ok, modules loaded: Main. *Main> :trace main (8,Stopped at <exception thrown> _exception :: e = _ [<exception thrown>] *Main> :back Logged breakpoint at Example.hs:(5,0)-(6,12) _result :: t [-1: Example.hs:(5,0)-(6,12)] *Main> :hist -1 : last' (Example.hs:(5,0)-(6,12)) -2 : last' (Example.hs:5:15-22) -3 : last' (Example.hs:(5,0)-(6,12)) -4 : last' (Example.hs:5:15-22) -5 : last' (Example.hs:(5,0)-(6,12)) -6 : last' (Example.hs:5:15-22) -7 : last' (Example.hs:(5,0)-(6,12)) -8 : main (Example.hs:3:25-32) -9 : main (Example.hs:2:17-19) -10 : main (Example.hs:2:16-34) -11 : main (Example.hs:3:17-23) -12 : main (Example.hs:3:10-33) <end of history> [-1: Example.hs:(5,0)-(6,12)] *Main> :force _result *** Exception: Example.hs:(5,0)-(6,12): Non-exhaustive patterns in function last' [-1: Example.hs:(5,0)-(6,12)] *Main> :back Logged breakpoint at Example.hs:5:15-22 _result :: t xs :: [t] [-2: Example.hs:5:15-22] *Main> :force xs xs = []
は、ハット・スタックはまた、デバッガが付属して、GHCiの(≥ 6.8.1)を
$ hat-stack Example Program terminated with error: No match in pattern. Virtual stack trace: (Last.hs:6) last' [] (Last.hs:6) last' [_] (Last.hs:6) last' [_,_] (Last.hs:4) last' [8,_,_] (unknown) main $
これら日を示します
いいえ、それは簡単ではありませんし、コードを再コンパイルせずに使えるという利点があります。
抱擁の減少数は、ありますか? また、コードをラップして各ステップで何をしているのか詳細を知るために、ハグフードのようなものを使用できますか?種類の
何もHaskellの標準に組み込まれていません。
私はHeliumグラフィカルなインタプリタはこのようなものを提供することを望んでいるだろうが、Webページが話題に沈黙しています。
部分的な解決策は、vacuumを使用してデータ構造を視覚化することです。
私はfold、scanなどのgifアニメーションをいくつか見てきましたが、現時点では見つかりませんでした。私はCale Gibbardがアニメーションを作ったと思う。
- 1. HDFS削減レプリケーションファクタ
- 2. メモリフットプリントの削減
- 3. メモリ削減
- 4. Lapackの行削減
- 5. タスク数削減Spark
- 6. Erlang Processes削減数
- 7. 座標削減python
- 8. 円形寸法削減?
- 9. 消費電力の削減
- 10. コマンドへのサービスの削減
- 11. ASP.NET MVC3ルートマッピングの削減ヘルプ
- 12. OpenMP削減同期エラー
- 13. XHR帯域幅削減
- 14. ラフなセットベースの属性削減
- 15. スパース行列の次元削減(TSNE/PCA)
- 16. キューの削減アルゴリズムですか?
- 17. データベースへのRuby on Railsトラフィックの削減
- 18. JavaScriptの再帰的な削減
- 19. 並列削減アルゴリズムの実装
- 20. 浮動小数点のSSE削減
- 21. 2次元配列の削減
- 22. テストに費やす時間を削減するには?
- 23. Visual Studio 2008で式の評価/削減を実行する
- 24. 文字列削減アルゴリズムを解決する
- 25. WPFアプリケーションのCPU使用量を削減する方法は?
- 26. gzipedで圧縮するときのCSSテキストファイルサイズの削減方法
- 27. jquery.min.js CPU時間を削減するには?
- 28. Hadoopでタスクを削減する時期はいつですか?
- 29. 削減表Iは、次の表を参照している島
- 30. C++:STDを有する予約領域を削減::ベクトル::リザーブ
Schemeには大きな違いがあります。ハスケルは怠惰なので、実際の評価は呼び出しの後で発生する可能性があります。 – bortzmeyer