Real World Haskell 第4章 Functional Programming
A Line-Ending Conversion Program このサブセクションでは A Simple Command-Line Framework の InteractWith.hs と Warming Up: Portably Splitting Lines of Text の SplitLines.hs を組み合わせて改行文字の自動変換を行うプログラム FixLines.hs を作成している。FixLines.hs の全ソースファイルは表示してないので、このブログで紹介した filter.hs と SplitLines.hs を統合した fixlines.hs を次に示す。 main = do xs <- getContents putStr $ fixLines xs fixLines :: String -> String fixLines input = unlines (splitLines input) splitLines :: String -> [String] splitLines [] = [] splitLines cs = let (pre, suf) = break isLineTerminator cs in pre : case suf of ('\r':'\n':rest) -> splitLines rest ('\r': rest) -> splitLines rest ('\n': rest) -> splitLines rest _ -> [] isLineTerminator c = c == '\r' || c == '\n' これを ghc --make fixlines.hs でコンパイルすると実行可能ファイル fixlines.exe ができる。 フリーのエディターの TeraPad でテキストファイル test.txt を作成し、 ファイル名: test.txt line 1 line 2 Terapad の[ファイル]-[文字/改行コード指定保存] メニューで改行コードを LF に指定して保存する。test.txt をバイナリエディタの Bz で開くと改行コードが 0A になっているのが分かる。(検索窓に #0a と入力して検索するとよい。) 次に fixlines < test.txt > test2.txt で改行コード変換を行い、Bz で test2.txt を開くと、改行コードが 0D 0A に変換されているのがわかる。 RHW本文のプログラムの SplitLines も自分で作成してみると、Haskell のプログラムの再利用がほとんどコピー・ペーストでできるのに驚くだろう。関数型言語は、基本的にグローバル変数のような環境依存のパラメータがないので、プログラムの再利用が簡単にできるからだ。
by tnomura9
| 2012-04-06 05:13
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||