Workshop/StartHaskell2/exercise8
『入出力』 練習問題
何もしない
returnを使って「何もしない」プログラムを書いてみましょう。
I/Oアクションを実行する
下の3つのI/Oアクションを使って、これらを上から順番に実行する関数を、do構文を使ったものと、sequence関数を使ったものと2通りで書いてみよう。
hello :: IO ()
hello = putStrLn "Hello!"
myName :: IO ()
myName = putStrLn "My name is Haskell."
bye :: IO ()
bye = putStrLn "Bye!"
プログラムの終了
“q”と入力されたら終了するプログラムを書こうと思ったが、バグっていてうまく終了しない。このプログラムを直して、ちゃんと動くようにしよう。
数の統計情報を表示する
ユーザーから空白区切りの数の入力をもらって、その合計と平均値を表示するコードを書いてみよう。
実行例
エコー
ユーザーの入力をそのまま表示するプログラムを作ろう。
ただし “quit” と入力されたときは “Do you really want to quit? (yes/no)” と表示して、次の入力が “yes” だったらプログラムを終了する。
実行例
文字出力の際、バッファリングの関係ですぐに表示されないことがある。そのときは hFlushを使うとよい。
import System.IO (hFlush, stdout)
main = do
putStr "input text: "
hFlush stdout
txt <- getLine
putStrLn txt
素敵な名前
名前をキーボードから入力させ、入力した名前があなたの名前と同じだったら、「いい名前だね!」と表示するプログラムを書いてみましょう。
九九の表
こんな感じの九九の表を表示してみよう。
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
Haskellには、いわゆるprintf関数もある。printfを使うときは Text.Printf モジュールをインポートする。
Prelude> import Text.Printf
Prelude Text.Printf> mapM_ (printf "%3d\n") [1..10]
1
2
3
4
5
6
7
8
9
10
フィボナッチ数列を表示する
ユーザーから数字の入力を受け取り、その長さだけフィボナッチ数列を表示するプログラムを作ろう。
実行例