9.9 練習問題
今日は時間がないので、問題文を写すだけにしておく。
- アクション
getLine
に、削除キーで文字を消去できる機能を加えたアクションreadLine :: IO String
を定義せよ。
ヒント:一文字削除するための制御文字は"\DEL"
、一文字戻るための制御文字列は"\ESC[1D"
である。 - エラーの際に単にビープ音を鳴らすのではなく、エラーの位置が分かるように電卓を変更せよ。パーサーは消費しなかった文字列を返すという性質を活用するとよい。
- ライフゲームは、世代ごとに画面全体をクリアするので、動かす環境によっては、動きがちらつくかもしれない。それを防止するために、状態が変わったところだけ表示し直すようライフゲームを変更せよ。
- ライフゲームのボードを対話的に作成したり、変更したりできるエディターを作れ。
- www.haskell.orgから入手できるグラフィック・ライブラリを用いて、電卓とライフゲームのグラフィック版を作成せよ。
- ニムはボードを使うゲームである。ボードには、番号の付いた行が五つあり、はじめは星が以下のように並べてある。
1:***** 2:**** 3:*** 4:** 5:*
二人のプレイヤーは、交互に行を一つ選び、その最後から一つ以上の星を取る。ボードから最後の星を取った方が勝ちである。ニムをHaskellで実装せよ。
ヒント:それぞれの残っている星の数のリストでボードを定義せよ。ボードの初期値は[5,4,3,2,1]
となる。