プログラミング言語意味論 第1回レポート


  1. (型クラス)

    プリント第 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 クラスの <= メソッドだけを定義すれば、 他のメソッドの定義は自動的に生成される。)

    以下の実行例を試しておくこと。 (通常のリストと結果が一致することを確認すること。)

    1. q "abc" <= q "xyz"
    2. q "abc" <= q "abd"
    3. q "axc" <= q "xbz"
    4. q "xbz" <= q "axc"
    5. q "abc" <= q "abcde"
    6. q "abc" <= q "ab"
    7. q "" <= q "abc"
    8. q "abc" <= q ""

    ただし q は以下のように定義された補助関数とする。

        q       :: [a] ->  MyList a
        q []     = MyNil
        q (x:xs) = MyCons x (q xs)
    

    参考にするプログラム: TypeClassExample.hs

  2. main 関数を持つプログラム)

    プリント第 5 章 pp. 5–6 問 5.4.1(の 3つの小問のうち 2つ以上)

    • 入力文字列をごと大文字と小文字に変換して出力する。 例えば、Hello,↵ World↵hello,↵HELLO,↵world↵WORLD↵ になる。 (は改行を表す。)

    • 入力文字列中の数字(‘0’ 〜 ‘9’)の出現回数をカウントして出力する。

    • 入力文字列中の ‘@’ が出現する最初の10行だけを出力する。

    参考にするプログラム: Head.hs

  3. (CPS への変換)

    プリント第 8 章 § 8.3

    次の Webページ を「ボタンをクリックしたら、一つの線分を表示する」 というバージョンに書き換えよ。

    Sierpinski.htmlSierpinski.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 学科事務前)です。 (オンラインの提出はありません。)


プログラミング言語特論のホームページ
Koji Kagawa