プリント第 3 章 p.20 問 3.11.2
Tree 型に対して、次のような関数を定義せよ。
depth :: Tree a -> Integer -- 深さ preorder :: Tree a -> [a] -- 前順走査 inorder :: Tree a -> [a] -- 中順走査 postorder :: Tree a -> [a] -- 後順走査 reflect :: Tree a -> Tree a -- 鏡像例えば、① depth tree4, ② preorder tree4, ③ inorder tree4, ④ postorder tree4, ⑤ reflect tree4 の結果はそれぞれ、 ① 3, ② [2,1,3,4], ③ [1,2,3,4], ④ [1,4,3,2], ⑤ Branch (Branch (Branch Empty 4 Empty) 3 Empty) 2 (Branch Empty 1 Empty) となる。
プリント第 4 章 p.5 Q 4.5.1 (Eq および Ord 両方)
組込みのリスト型と等価なデータ型
data MyList a = MyNil | MyCons a (MyList a)
を、deriving (発音は /diráiviŋ/) を用いずに、Eq クラスと Ord クラスのインスタンスとして宣言せよ。Ord クラスのメソッドにはいわゆる辞書式の順序を用いよ。
(クラスの定義中にデフォルトの実装が定義されているので、 Eq クラスの == メソッドと Ord クラスの <= メソッドだけを定義すれば、 他のメソッドの定義は自動的に生成される。)
ヒント: 少なくとも以下のケースをテストせよ。
ただし toMyList は以下のように定義された補助関数とする。
toMyList :: [a] -> MyList a toMyList [] = MyNil toMyList (x:xs) = MyCons x (toMyList xs)
参考にするプログラム: TypeClassExample.hs
プリント第 5 章 pp. 6 問 5.4.2(の 3つの小問のうち 2つ以上)
入力文字列を行
入力文字列中の数字(‘0’ 〜 ‘9’)の出現回数をカウントして出力する。
入力文字列中の ‘@’ が出現する最初の10行だけを出力する。
参考にするプログラム: Head.hs
プリント第 8 章 問 8.3.1
次の関数を「ボタンをクリックしたら、一つの線分を表示する」 というバージョンに書き換えよ。
Sierpinski.html (Sierpinski.js)
ヒント: forward, sierpinski, zig, zag を CPS に変換する必要がある。turnLeft, turnRight については、 (この問題では) CPS にする必要はない。
参考にするプログラム:
Hanoi0.html,
Hanoi0.js,
Hanoi.html,
Hanoi.js,
Fib0.html,
Fib0.js
Fib.html,
Fib.js
以下の問題は、非必須のチャレンジ問題です。
Prolog言語をプリントで自習し、 プリント中のサンプルプログラムを元にして、 日本史や世界史、あるいは物語の中の有名な家系を Prologプログラムにし、 実行例を作成せよ。
Scheme言語をプリントで自習し、 サンプルプログラム以外の call/ccの使用例を WWW などで探して、 できれば自分なりのアレンジを加えよ。
Haskellによる画像作成ライブラリを用いて、 2, 3のオリジナル作品を作成せよ。
できるだけ短く簡潔におさめて下さい。
提出〆切は、2月 20日(木)の 18:00 です。 提出場所は、香川のレターボックス(7F 学科事務前)です。 (オンラインの提出はありません。)
B4/M2 など上記の締切までに提出するのが難しい人はメールで連絡を下さい。ただし、 成績の提出締切が 2/28 ですので、それ以降の提出の場合は、成績訂正というかたちになります。 (成績表に反映されるのが遅れます。) その場合でも、2/20 及び 2/27 の時点でできたところまで、 部分提出してもらうことが望ましいです。