プログラミング Haskell 第9章 対話プログラム その2
今日は電卓プログラムを実装するあたりからです。
- seqn :: [IO a] -> IO () -- IO アクションのリストを受け取って順に呼び出す
- UI としてテキストで電卓のボタンの形を定義
- 受け付けるキー入力(文字)の定義
- いまさらですけど、Haskell では他の言語での定数のようなものも全て関数定義ですね。いや、本当にいまさらですけど。
- showbox, display -- 電卓の表示をおこなう関数
- calc :: String -> IO() -- 端末からの入力を受け取って有効な文字かチェックして実行
- process :: Char -> String -> IO () -- 文字と現在の文字列に応じて処理する。パターンマッチで条件分岐。ここから呼ばれる実際のアクションの中で calc が呼ばれる(終了する quit 以外)ので再帰呼び出しになる。
- つまりメインループに相当する部分は calc -> process -> (delete, eval, clear, press) -> calc という呼び出しが相互再帰している
インタラクティブな入出力を伴うプログラムがどんな風に実装されるのかのおおざっぱな感じがわかりました。Haskell では「ループ -> 再帰」というのを考えるとこれで自然なんですね。言われてみれば納得ですがちょっと不思議な感じもまだ残っています。
次はライフゲームを作るそうです。