単純なファイルの読み書きなら、Haskell はワンライナーでできる。書き込みは writeFile、読み出しは readFile、追加書き込みは appendFile でできる。
Hugs> writeFile "hello.txt" "hello" Hugs> readFile "hello.txt" >>= putStr hello Hugs> appendFile "hello.txt" ", world" Hugs> readFile "hello.txt" >>= putStr hello, world 文字列ではなく、リストなどのデータを記録するときは show 関数で、データを文字列に変換しておくと良い。 Hugs> writeFile "array.txt" (show [1,2,3]) Hugs> readFile "array.txt" >>= putStr [1,2,3] ファイル array.txt では、リストのデータを文字列に変換して記録されているので、read 関数で戻してやらないといけない。read 関数で戻すときにはどのようなデータ型に戻すのかを指定するキャスト (::[Int] など)が必要だ。 Hugs> do cs <- readFile "array.txt"; print (sum (read cs ::[Int])) 6 話がそれるが、show 関数は様々な型のデータを文字列に変換してくれるから、次の例のようにプログラムで処理したデータを表示する時に便利だ。 Hugs> putStr ("sum " ++ show [1,2,3] ++ " = " ++ show (sum [1,2,3])) sum [1,2,3] = 6 ファイルの読み出しをすると、IOモナドの世界にワープしてしまって出られなくなるので、その後の処理もIOモナドの世界の関数 print などに関連付けてデータ処理をしなくてはならないので気をつけないといけない。といっても、return や putStr などのIOモナドの世界の関数の引数として記述すれば良いだけなので慣れの問題だけだ。 IOモナドの世界は変数のスコープに似ている。ブロックの内側から外の変数は見えるが、ブロックの外側からブロックの内側の変数を見ることはできない。同様に、IOモナドの世界からは、純粋関数の世界の関数を利用できるが、純粋関数の世界の関数からは、IOモナドのデータを利用することはできない。恐れられているIOモナドと言ってもプログラムで使うという目的からはその程度の理解で充分だ。 ともあれ、データの保存や読み出しもHugsのコマンドラインから簡単にやれることが分かったので一安心だ。
by tnomura9
| 2009-09-21 18:46
| Haskell
|
Comments(0)
|
カテゴリ
新型コロナウイルス 主インデックス Haskell 記事リスト 圏論記事リスト 考えるということのリスト 考えるということ ラッセルのパラドックス Haskell Prelude Ocaml ボーカロイド 圏論 jQuery デモ HTML Python ツールボックス XAMPP Ruby ubuntu WordPress 脳の話 話のネタ リンク 幸福論 キリスト教 心の話 メモ 電子カルテ Dojo JavaScript C# NetWalker ed と sed HTML Raspberry Pi C 言語 命題論理 以前の記事
最新のトラックバック
最新のコメント
ファン
記事ランキング
ブログジャンル
画像一覧
|
ファン申請 |
||