第9章 対話プログラム #4

9.9 練習問題

今日は時間がないので、問題文を写すだけにしておく。

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