Haskell-入力と出力

これまでに説明したすべての例は、本質的に静的です。この章では、ユーザーと動的に通信する方法を学習します。Haskellで使用されるさまざまな入力および出力手法を学習します。

ファイルとストリーム

これまで、プログラム自体のすべての入力をハードコーディングしてきました。静的変数から入力を取得しています。それでは、外部ファイルからの読み取りと書き込みの方法を学びましょう。

ファイルを作成して「abc.txt」という名前を付けましょう。次に、このテキストファイルに次の行を入力します:「Tutorialspointへようこそ。ここでは、Haskellを学ぶための最良のリソースを入手できます。」

次に、このファイルの内容をコンソールに表示する次のコードを記述します。ここでは、EOF文字が見つかるまでファイルを読み取る関数readFile()を使用しています。

main = do  
   let file = "abc.txt" 
   contents <- readFile file 
   putStrLn contents

上記のコードは、ファイルの終わり文字に遭遇するまで、ファイル「abc.txt」を文字列として読み取ります。このコードは、次の出力を生成します。

Welcome to Tutorialspoint
Here, you will get the best resource to learn Haskell.

端末に印刷されているものはすべて、そのファイルに書き込まれていることを確認してください。

コマンドライン引数

Haskellは、コマンドプロンプトを介してファイルを操作する機能も提供します。ターミナルに戻って入力しましょう"ghci"。次に、次の一連のコマンドを入力します-

let file = "abc.txt" 
writeFile file "I am just experimenting here." 
readFile file

ここでは、「abc.txt」というテキストファイルを作成しました。次に、コマンドを使用してファイルにステートメントを挿入しましたwriteFile。最後に、コマンドを使用しましたreadFileファイルの内容をコンソールに出力します。私たちのコードは次の出力を生成します-

I am just experimenting here.

例外

アン exceptionコードのバグと見なすことができます。これは、コンパイラーが実行時に期待される出力を取得しない状況です。他の優れたプログラミング言語と同様に、Haskellは例外処理を実装する方法を提供します。

Javaに精通している場合は、通常エラーをスローして同じものをキャッチするTry-Catchブロックをご存知かもしれません。 catchブロック。Haskellには、ランタイムエラーをキャッチするための同じ関数もあります。

の関数定義 try「try :: Exception e => IO a-> IO(Eitherea)」のようになります。次のサンプルコードを見てください。「ゼロ除算」例外をキャッチする方法を示しています。

import Control.Exception 

main = do 
   result <- try (evaluate (5 `div` 0)) :: IO (Either SomeException Int) 
   case result of 
      Left ex   -> putStrLn $ "Caught exception: " ++ show ex 
      Right val -> putStrLn $ "The answer was: " ++ show val

上記の例では、組み込みを使用しています try の機能 Control.Exceptionモジュールなので、事前に例外をキャッチしています。上記のコードは、画面に以下の出力を生成します。

Caught exception: divide by zero