/haskell-exercises

「すごいHaskell楽しく学ぼう!」の社内勉強会のために作成した、章末ごとの演習問題集です。

Primary LanguageHaskell

すごいHaskell楽しく演習!

「すごいHaskell楽しく学ぼう!」の自作章末演習問題です。
社内勉強会のために作っているものを公開します。

章番号については、オーム社から出ている日本語訳版と対応しています。(Amazon)
原文をオンラインで読むことが出来ますが、こちらは章番号がずれていますのでご注意ください。(英語サイト)

章リンク

ディレクトリ構成

  • Src : 問題を解くためのテンプレートが格納されています。こちらのファイルを直接編集してください。
  • Answer : 解答が格納されています。どうしても解けない場合に参照してください。
  • Test : 自分の解答が正しいかを格納するための自動テストが格納されています。

テスト方法

テストにはQuickCheckを利用しているため、QuickCheckをインストールしてください。cabalコマンドが使える場合には、

$ cabal install QuickCheck

でインストールできます。

章ごとの問題を全てテスト時には、ghciをプロジェクトルートで起動した後、該当のテストファイルを読み込み、testを実行します。
また、特定の関数のみテストする場合には、同様にテストファイルを読み込んだ後、test_(関数名)を実行します。
例えば、第1章のテストを実行する場合は以下のようになります。

> :l Test/Chapter1.hs
> test -- 第1章のテストを全て実行
=== prop_manlen from Test/Chapter1.hs:7 ===
*** Failed! Exception: 'Prelude.undefined' (after 1 test):
((0,0),(0,0))

=== prop_points from Test/Chapter1.hs:10 ===
*** Failed! Exception: 'Prelude.undefined' (after 1 test):
0

=== prop_mancircle from Test/Chapter1.hs:13 ===
*** Failed! Exception: 'Prelude.undefined' (after 1 test):
0

False
> test_manlen -- manlen関数のテストのみ実行
*** Failed! Exception: 'Prelude.undefined' (after 1 test):

なお:l Test/Chapter1.hsを実行した後に:e Src/ChapterX.hsで回答を編集した場合、最新の回答でテストが実行されます。
このため、問題を解く際には以下のようなワークフローをおすすめします。

> :l Test/Chapter1.hs -- 初めにテストファイルを読み込む
Ok, modules loaded: Src.Chapter1, Answer.Chapter1, Main.
> test_manlen -- これから実装する関数のテストが失敗することを確認する
*** Failed! Exception: 'Prelude.undefined' (after 1 test):
((0,0),(0,0))
> :e Src/Chapter1.hs -- 問題を解く
> test_manlen -- 再度テストを実行し、成功するか確認する
+++ OK, passed 100 tests.