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


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

    プリント第 4 章 p.6 問 4.4.2(の 3 つの小問のうち 2 つ以上)

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

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

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

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

  2. (CPS への変換)

    プリント第 7 章 p.9 問 7.3.1

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

    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

以下の問題は、非必須のチャレンジ問題です。ただし、問題を解かなくても、 Scheme, Prolog の例題を WappenLite で実際に実行してみることをお勧めします。

WappenLite は Java 仮想機械上で動作するプログラミング言語処理系をダウンロード・起動し、 ブラウザーから接続できるようにするためのプログラムです。

なお、WappenLite は Prolog, Scheme, Frege では共通のプログラムです。 一つだけダウンロードして、一つだけ実行しておけば充分です。別々にダウンロードし、 実行する必要はありません。

改良の参考にするため、 WappenLite に関する アンケートにもご協力をお願いします。(複数回の回答を防止するためログインを要求しますが、 回答者は記録しません。)

チャレンジ問題(ボーナス問題)

  1. (Prolog)

    Prolog 言語をプリントで自習し、 プリント中のサンプルプログラムを元にして、 日本史や世界史、あるいは神話・物語の中の有名な家系を Prolog プログラムにし、 実行例を作成せよ。

  2. (Scheme)

    Scheme 言語をプリントで自習し、 プリント中のサンプルプログラム以外の call/cc (call-with-current-continuation) の使用例を WWW などで探して、 できれば自分なりのアレンジを加えよ。

  3. (Haskell)

    (授業プリント中のサンプルプログラム以外の)Haskell の遅延評価 (lazy evaluation) を有効に活用したプログラムの例を WWW などで探して、できれば自分なりのアレンジを加えよ。


解答上の注意ほか

できるだけ短く簡潔におさめて下さい。

提出〆切は、2 月 15 日(木)の 18:00 です。 提出場所は、香川のレターボックス(1 号館 7F 学科事務前)です。 (オンラインの提出はありません。)

B4/M2 など上記の締切までに提出するのが難しい人は、事前にメールで連絡を下さい。ただし、 事務への成績の提出締切が 2/28 ですので、それ以降の提出の場合は、成績訂正というかたちになります。 (成績表に反映されるのが遅れます。) その場合でも、2/15 及び 2/28 の時点でできたところまで、 部分提出してもらうことが望ましいです。


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