プリント第 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 クラスの <= メソッドだけを定義すれば、 他のメソッドの定義は自動的に生成される。)
以下の実行例を試しておくこと。 (通常のリストと結果が一致することを確認すること。)
ただし q は以下のように定義された補助関数とする。
q :: [a] -> MyList a q [] = MyNil q (x:xs) = MyCons x (q xs)
参考にするプログラム: TypeClassExample.hs
プリント第 5 章 pp. 5–6 問 5.4.1(の 3つの小問のうち 2つ以上)
入力文字列を行
入力文字列中の数字(‘0’ 〜 ‘9’)の出現回数をカウントして出力する。
入力文字列中の ‘@’ が出現する最初の10行だけを出力する。
参考にするプログラム: Head.hs
プリント第 8 章 § 8.3
次の Webページ を「ボタンをクリックしたら、一つの線分を表示する」 というバージョンに書き換えよ。
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
できるだけ短く簡潔におさめて下さい。
提出〆切は、2月 21日(木)の 18:00 です。 提出場所は、香川のレターボックス(7F 学科事務前)です。 (オンラインの提出はありません。)