...

関数プログラミング(I217

by user

on
Category: Documents
31

views

Report

Comments

Transcript

関数プログラミング(I217
関数プログラミング(I217-1209)レポート問題
注意事項
1. 解答用の雛形ファイル 1209i217assignmentTemplate.cafe に対し,(1) …<n:Nat>
で示された部分(15+5+5+23=48 箇所)に適切な CafeOBJ コードを書き込み,(2) そ
れらに対し適切にコメントを付加して,解答ファイルを完成せよ.
2. !!! Tests !!!で示されるテストの記述(5 箇所)に含まれる全てのテストケースに
対して,-->で指定された式が出力されるように,CafeOBJ コードを書き込むこと.
3. 長いコメントを書く必要はないが,簡潔なコメントを適切な箇所に挿入することが推奨
される.コメントは,“{ コメント }” または ** コメント <end_of_line>のいず
れかのスタイル(雛形ファイルの最初の10行を参照)を用いること.コメントは日本
語または英語で記述せよ.もし日本語コメントを含んだ解答ファイルを CafeOBJ システ
ムで適切に処理できなければ,コメント部分を別の pdf ファイルとして提出しても良い. 4. 解答ファイルの名前は<学籍番号><名字>-i217report.cafe とすること.たとえば
学 籍 番 号 が 1010034 で 名 前 が 鈴 木 一 郎 で あ れ ば , 解 答 フ ァ イ ル の 名 前 を
1010034suzuki-i217report.cafe とせよ.日本語のコメントファイルを別ファイ
ルとして用意するときは,その名前は 1010034suzuki-i217report.pdf とせよ.
5. 解答ファイルの先頭には氏名(name)と学籍番号(student number)を記入すること.
6. 解答ファイル(.cafe ファイル)は,全ての指定部分に CafeOBJ コードを書き込んでな
く未完成でも,in コマンドを用いて CafeOBJ システムに読み込めるようにすること.
そのために,未完成の部分とそれに関係するテストケースをコメントとするなどの適切
な工夫をすること.
7. 解答ファイル(.cafe ファイル1つまたは.caf ファイルと.pdf ファイルの2つ)は〆切ま
でに,e-mail の添付ファイルとして, [email protected] 宛送ること.その e-mail
の件名(Subject)は i217-1209-report とすること.
[問題1] エラー処理を含むキューの定義(15 点)
入れた順番でデータを取り出す(first in first out)データ構造キュウー(queue)を定義
せよ.関数 top の定義を参考にし,エラー処理が適切に定義されるように, enq 関数と deq
関数に対するランク(op 宣言)と等式(eq 宣言)を完成せよ. [問題2] テーブル関数の再定義(15点)
講義資料4とその練習問題で示されたテーブルを操作する関数の定義(ans4.cafe ファイ
ルを参照)を以下のように再定義せよ.
1. insert を isKey と update を使って定義する.
2. remove を isKey と delete を使って定義する.
3. join を aKeyIn と merge を使って定義する.
ここで,(T1:Table aKeyIn T2:Table)は,テーブル T1 のキーの中にテーブル T2 のキーと
同じものが一つでもあれば true に,そうでなければ false になる.
[問題3] 3つのプロセスからなる Mutex の全状態遷移の定義(15点)
3つのプロセス(p1,p2,p3)の相互排除プロトコル MUTEX(講義資料6参照)の任意
の N:Nat ステップまでの全ての状態遷移を,状態を要素とする3分無限木(3-ary infinite
tree)として定義せよ.また,それらの状態遷移に現れる状態が相互排除条件(mutual
exclusion condition)を満たすか否かを示す,真偽値(ture, false)を要素とする3分無限
木も定義せよ.
[問題4] ペアノ自然数に関する証明スコア(15点)
ペアノ自然数の乗算(_*_)が望みの性質を満たすことを示す証明スコア(proof score)
完成せよ.ファイル中に示されている加算(_+_)に対する証明スコアを参考にせよ.
Fly UP