6

リストを出力する長時間実行の計算があります。計算時にこのリストから値を出力したいと思います。これを行うためのきちんとした方法は何でしょうか?

現在、私はmapM_ print各値をSTDOUTに出力するために使用しています。これは、コマンドラインに値を出力するという単純なケースでは十分に機能しますが、少しハッキーで操作が難しいと感じます。

さらに、ある時点で、コマンドライン出力をインタラクティブな視覚化に変えたいと思っています。リストをFRPからのイベントのストリームのようなものに変えるにはどうすればよいですか?これをイベントのソースとして既存のGUIフレームワークにプラグインできると便利です。

リスト以外のものを使用するように関数を書き直すことはオプションですが、リストをそのまま使用できるソリューションが理想的です。

4

1 に答える 1

6

これは、ライブラリのような反復および反復の仕事です。

プロキシライブラリの使用。

import Control.Proxy

runProxy $ fromListS [1..10] >-> <processing> >-> printD >-> <more> processing>

<processing>必要な追加計算はどこにありますか。

同様の質問: mapM の遅延バージョン、 Haskellの mapM は遅延ではありませんか?

例えば:

> labeledPrint label x = putStrLn $ label ++ show x
> runProxy $ fromListS [1..4] >-> printD >-> mapD (*2) 
                              >-> useD (labeledPrint "Second printer: ")
1
Second printer: 2
2
Second printer: 4
3
Second printer: 6
4
Second printer: 8

アプリケーションの順序を逆にして使用すると、通常の関数アプリケーションのように見えます<-<>->

runProxy $ useD (labeledPrint "Second printer: ") <-< mapD (*2)
                                                  <-< printD
                                                  <-< fromListS [1..4]
于 2013-01-06T16:43:35.243 に答える