Hugs で使い捨てプログラムを作る場合、Unix ならフィルターを作れば簡単だ。たとえばファイルの内容を表示する cat のようなものは次のようにプログラムできる。
#!/usr/bin/runhugs main = getContents >>= putStr また、!ls のようにシェルコマンドの前に ! をつければHugsのコマンドラインからファイルリストを表示することができる。 WinHugs の場合はこのような芸当ができないので、まずディレクトリの情報を取得する方法から工夫しないといけない。ディレクトリの操作関係の関数は、Directoryモジュールの中にあるのでまずこれを load する。 Hugs> getCurrentDirectory ERROR - Undefined variable "getCurrentDirectory" Hugs> :load Directory Directory> 現在のディレクトリのパスを得るには、getCurrentDirectory 関数を用いる。 Directory> getCurrentDirectory >>= print "C:\\WinHugs" ディレクトリ内のファイルのリストを取るには、getDirectoryContents 関数を用いる。 Directory> getDirectoryContents "C:/WinHugs" >>= print [".","..","array.txt","btree.hs", ... (省略) ... ,"writedata.hs"] リスト表記ではなくスペースで区切りたいときは、unwords 関数を使う。 Directory> getDirectoryContents "C:/WinHugs" >>= putStr . unwords . .. array.txt btree.hs ... (省略) ... writedata.hs 現在のディレクトリのファイルリストを作りたいときは getCurrentDirectory と getDirectoryContents を組み合わせる。 Directory> getCurrentDirectory >>= getDirectoryContents >>= putStr . unwords . .. array.txt btree.hs ... (省略) ... writedata.hs IOモナドのプログラムは基本的にはモナドの世界の関数の出力を >>= でパイプして使うことになる。純粋関数の世界の関数は、putStr . unwords のように、モナドの世界の関数との合成関数として利用することになる。 do 記法を使えば、たとえば、 main = do cs <- getLine putStr cs のように、手続き型のプログラム言語に似せて表記することができるが、本質的には上の関数の出力が下の関数の入力として渡されると考えなければならないので注意が必要だ。 ■
[PR]
by tnomura9
| 2009-09-23 14:41
| Haskell
|
Comments(0)
|
カテゴリ
主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude 圏論 ボーカロイド jQuery デモ Python ツールボックス XAMPP Ruby ubuntu 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||
外部サイトRSS追加 |
||