Haskell で数値計算だけをやっていても面白くないので、普通のプログラムはないか探してみた。オライリー社の、Real World Huskell, by Bryan O'Sullivan, John Goerzen, and Don Stewert という本にはそういう例がふんだんに出てくる(らしい。まだ読み始めたばかり)。そのなかで、Unix, Windows, Mac で異なる改行文字を認識して、文字列から行を取り出すプログラムがあったので引用する。
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' 実行例: Hugs> :e splitlines.hs Hugs> :l splitlines.hs Main> splitLines "foo\r\nbar" ["foo","bar"] これを見ると Haskell の表現力が数値計算に止まらないことが分かる。上のプログラムで break predicate list 関数は、引数のリスト list の中で、predicate が True になる文字があれば、その前の部分と、その文字を含む後の部分に分ける働きがある。break は Prelude の標準関数だ。 手続き型のプログラムの if 文は引数のパターンで、繰り返しは再帰関数で表現されている。パターンと再帰関数は最初は戸惑うが、慣れると可読性の良いすっきりしたプログラムを書くことができる。 Haskell は普通の汎用言語なのだ。
by tnomura9
| 2009-09-23 05:25
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||