本日の課題; 以下の課題の答えを「本日中に」メイルで、 report@logic.cs.tsukuba.ac.jp あてに提出せよ。氏名、学籍番号を「メイル本文中に」必ず明記せよ。 また、Subjectは report という文字列を含むこと。形式は、テキスト もしくは pdf とする。(WORD 等で書いたときは、pdf に変換してから メイルに添付せよ。) 1. MiniC 処理系の showコマンドを使って、関数呼び出しの際の スタックの変化を理解せよ。 ただし、showコマンドは、 show 0; という一文を miniCプログラムの中で実行することにより、 その時点での「アクセス可能なスタックフレーム」が表示される ものである。これは、「スタックフレームすべて」ではなく、 「現在のスタックフレームから、Access Link をたどって到達 できるスタックフレーム」のみが表示されることに注意せよ。 処理系が、静的束縛であるか、動的束縛であるかによって、showで 表示される内容に違いが生じる。このことを適当な例題プログラム を使って説明せよ。 2. OCaml 処理系を使って、ML言語の構文や意味を理解し、以下の事を調べよ。 (i) 静的束縛であるか、動的束縛であるか。 (ii) 関数呼び出しの際の評価順序(計算順序)は、 名前呼びであるか、値呼びであるか。 (iii) e1 e2 の形の関数呼び出しの際の評価順序(計算順序)は、 e1 が先か e2が先か。 3. MiniML言語の「対(ペア)」データ型を使えば、2分木を表現する ことができる。C言語でも構造体 (struct型)を使えば、ほぼ同様の ことができるが、少し違いがある。 (i) MiniML言語では、一度作った 2分木(のためのメモリ)は、 どうなるだろうか? 2分木を大量に作り続ける関数を作成して 呼びだして、実験せよ。 (ii) MiniML言語処理系における「2分木などのデータを覚えてお くためのメモリ領域」は、スタック上に取られるかどうか 考えなさい。 4. (余力のある人のみ) MiniML 言語では、intやboolの定数のほか に「関数」をあらわすデータがある。このような関数の型は、どうなる であろうか? また、MiniML 言語のプログラム中には、intや bool といった型名を書かないが、そんなことで大丈夫だろうか? いったい OCaml言語の処理系はどうなっているだろうか、考えてみなさい。 以上。