関数型プログラミング言語Haskell Part26
■ このスレッドは過去ログ倉庫に格納されています
0624デフォルトの名無しさん
2014/12/03(水) 22:57:56.86ID:CqBm4LFv仮に、[(入力時の時間, 一行文字列)] というリストがあれば、
これを秒数でグループ分け(group)したリストに対して
ファイル出力関数を mapM_ すればいい。
で、このリストをどうやって作るかだが、リアルタイムではなく、
全てのデータの入力を待ってから一気にファイル出力するのなら、
一行読み取る処理と現在時刻を求める処理をループで回せばいい。
(ループで回すというのは、再帰でも何でもいいから、とにかく繰り返すこと)
リアルタイムでやるのなら、unsafeInterleaveIO を使って作ればいい。
使い方はググれば結構出てくるから、とりあえず概略だけ言うと、
f : IO [ (入力時の時間, 一行文字列)]
f = unsafeInterleaveIO $ do
d@(入力時の時間, 一行文字列) <- 読み取り関数
if 終了? then (return []) else (return $ d : f)
という感じの関数 f を作ればいい。
後は、初めに言った group と mapM_ をすれば、遅延評価の働きで、
自動的に一秒毎にファイル出力されるはず。
■ このスレッドは過去ログ倉庫に格納されています