第14回 最終課題

課題

情報工学演習3の最終課題は、下記の3つのうち1つを選択せよ。

■ Squeak の最終課題

砲丸の軌跡を表示するプログラムを作成せよ。

まず、以下のオブジェクトを定義せよ:

次に、(1) 砲丸の軌跡以外の軌跡オブジェクトを定義せよ。(2) 星の大きさや色が簡単に指定できるように MyPainter を工夫せよ。(3) 星以外の図形が簡単に指定できるように MyPainter を工夫せよ。

以上について、オブジェクトのクラスとメソッドの定義を全て印刷し、クラスやメソッドごとにコメントを手書きせよ。実行するための Workspace を作成し、そして、(1)〜と(3)の効果がわかるように実行画面を作成し、印刷せよ。

ヒント:Squeak の画面位置は、Point オブジェクトで指定する。たとえば、「a := StarMorph new」としたとき「a position: (Point x: 10 y: 20)」により、X座標とY座標を別々に指定することができる。ちなみに、その後「a openInWorld」とすると表示される。

注意:画面が星だらけになるといけないので、実行するまえにセーブをしておこう。

■ Scheme の最終課題

配列オブジェクトmy-array を、scheme 上に作成しよう。my-array は少なくとも次のメッセージが受理できること。

  1. create 〈サイズ〉:指定サイズの配列を作成する。初期値は nil とする。
  2. size :配列の要素数を返す(create したときのサイズを返す)。
  3. put_at 〈要素〉〈番号〉:指定番目に要素を与える。
  4. get_at 〈番号〉 :指定番目の要素を返す。
  5. shift:先頭の要素を返すこととし、残りの要素列は対応する番目が一つ小さい番目として、最後の要素を nil とする。破壊的な動作となる。(例)shift 前 [1,2,3] ⇒ shift 後 [2,3,nil]
  6. member 〈要素〉:配列内に同一の要素が存在するならば番目を返し、そうでなければ偽(#f)を返す。
  7. append 〈配列オブジェクト〉:自身の配列に、指定の配列を結合した結果のオブジェクトを返す(破壊的な動作ではない)。
  8. sort :配列内の要素として数字を前提とし、その大小関係に基づき並び変える。その結果を新しいオブジェクトとして返す(破壊的な動作ではない)。
  9. each 〈関数〉:要素の1つ1つを〈関数〉に適用し、最後の適用結果を返す。

注意:第10回の「オブジェクト指向への接近」の節を参考にせよ。オブジェクト指向になっていない場合は、「誤り」となり、点数が伸びないので注意すること。

ソースプログラムと実行結果を印刷し、コメントを手書きせよ。とくに工夫した点がわかるように実行結果を示すこと。

■ Prolog の最終課題

英文は、名詞と動詞の並び順に規則があるが、さらに、名詞の形と動詞の形の間にも規則がある。たとえば、「i,buy,it」は文法通りだが「he,buy,it」は文法誤りで、「buy」を「buys」にしなければならない。主語と動詞の形の一致を agreement という。

agreement は、前回の規則において、第2引数を工夫するか、新に第3引数に情報を持たせることによって、チェックできる。

noun([book|R]-R,n(book),[sg3]).    % sg3 は「3人称、単数」の意味
noun([books|R]-R,n(book),[pl]).    % pl は「複数」の意味

noun([he|R]-R,n(he),[sg3]).
noun([i|R]-R,n(i),[sg1]).

verb([buy|R]-R,v(buy),[base,pr]).  % base は「原形」、pr は「現在形」の意味
verb([buys|R]-R,v(buy),[sg3,pr]).
verb([bought|R]-R,v(buy),[ps,pf]). % ps は「過去形」、pf は「過去分詞形」の意味
verb([buying|R]-R,v(buy),[ing]).   % ing は「現在分詞形」の意味

agreement_sbj_verb(P1,P2) :-
  member(sg3,P1),    % 主語が「3人称、単数」であり、
  member(pr,P2),     % 述語が「現在形」であるとき、
  !,                 % 
  member(sg3,P2).    % 述語は「3人称、単数」である。
                     % カットオペレータがあるので、
		     % ! を通過後は、member(3sg,P2) が
		     % 不成立になると、この規則は不成立となる。

agreement_sbj_verb(_,_).  % 上記の規則でカットオペレータを通過していないとき、
                          % ここがマッチする。

(質問)
*その1
?- E1 = [he,buys,books],
     noun(E1-E2,N1,P1), 
     verb(E2-X,V1,P2),
     agreement_sbj_verb(P1,P2).
*その2
?- E1 = [he,buy,books],
     noun(E1-E2,N1,P1), 
     verb(E2-X,V1,P2),
     agreement_sbj_verb(P1,P2).
*その3
?- E1 = [i,buy,books],
     noun(E1-E2,N1,P1), 
     verb(E2-X,V1,P2),
     agreement_sbj_verb(P1,P2).

ヒント:上述の質問は、実際には、以下の例のようにして、規則の中に埋め込む。

s(E1-X,s(NP,VP),P2) :-
  np(E1-E2,NP,P1),	     % 主語の名詞句
  vp(E2-X,VP,P2),	     % 述語の動詞句
  agreement_sbj_verb(P1,P2). % 主語の品詞 P1 と述語の品詞 P2 の一致チェック

vp(E1-X,vp(V,NP),P1) :- % 動詞句の品詞は、
  verb(E1-E2,V,P1),     % 動詞の品詞 P1 とする
  np(E2-X,NP,_).        % 目的語の名詞句の品詞は無視する

np(E1-X,np(DET,N),P2) :- % 名詞句の品詞は、
  det(E1-E2,DET,_),      % 冠詞部分は無視し、
  noun(E2-X,N,P2).       % 名詞部分の品詞 P2 とする。

少なくとも以下の○の文に対して Yes となり、×の文に対して No となるように規則を作成しよう。

さらに、疑問文、否定文、命令文、副詞(sometimesなど)、比較級、最上級など 2、3 の英文法について解析できるように規則を作成しよう。

プログラムリストを印刷し手書きでコメントを入れよ。実行結果は、工夫したことがわかるように出力し、印刷せよ。また、アピールしたい点があれば記述せよ。

■最終課題レポートの作成要領

レポートの形式は、A4 用紙を使用する。表紙に、科目名(情報工学演習3・多言語)、選択言語、学籍番号、氏名、提出日を記載する。本体は、コメントを手書きしたプログラム、工夫した点の説明書き、実行結果、および、動作の特徴の説明書きで構成せよ。また、採点とは無関係であるが、感想を書くこと。

レポートの提出期限は、2007年8月10日(金)17:00 とする。提出先は、計算機C工学講座のポスト(部屋番号:1504)とする。

レポートの体裁をなしていない場合、他人のプログラムや実行結果をコピーした場合、実行結果が捏造(ねつぞう)である場合は、レポート提出が無かったものとして扱う、すなわち、単位が出ない。まちがったことをしないように。

提出期限までの間、質問は受け付ける。課題について疑問などがあれば、気軽にどうぞ。


(c) 2007.7.11 by tokuhisa