Haskell でファイルの行を逆順にするフィルター reverse を書いてみた。
-- filename: reverse.hs import System.Environment (getArgs) concatFile :: [FilePath] -> IO [Char] concatFile [] = return [] concatFile (f:fs) = do xs <- readFile f rest <- concatFile fs return $ xs ++ rest main = do args <- getArgs if null args then do cs <- getContents putStr $ (unlines . reverse . lines) cs else do cs <- concatFile args putStr $ (unlines . reverse . lines) cs 上のプログラムの reverse の部分を他の関数にすれば、たいていのフィルターに利用できると思う。次の実行例のように、ファイルを連結して逆順にすることもできる。 実行例: >reverse cat.hs reverse.hs (結果省略)
by tnomura9
| 2011-11-21 02:29
| Haskell
|
Comments(2)
Commented
by
ツムジ
at 2011-11-23 14:32
x
main 関数は次のようにした方が、すっきりすると思いますが、どうでしょう?
main = do args <- getArgs cs <- if null args then getContents else concatFile args putStr $ (unlines . reverse . lines) cs
0
Commented
by
tnomura9 at 2011-11-23 15:49
ツムジさん、コメントありがとうございました。
putStr $ (unlines . reverse . lines) cs の重複がなくなったうえに、余分な do 記法もありませんね。参考になりました。
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||