情報工学演習3の最終課題は、下記の3つのうち1つを選択せよ。
砲丸の軌跡を表示するプログラムを作成せよ。
まず、以下のオブジェクトを定義せよ:
砲丸の座標は水平方向と垂直方向の2次元で表す。「setX:」と「setY:」により水平方向と垂直方向の位置を指定する。「refX」と「refY」により水平方向と垂直方向の位置を参照する。
座標オブジェクトの指定する位置を、Squeak の表示用の位置に変換する。「setOX:OY:」により、Squeak の画面位置と対応する座標の原点を指定する。「scale:」により、縮尺を指定する。「convert:」により引数の座標オブジェクトの位置から Squeak の表示用の位置を算出する。
砲丸の軌跡を計算する。「gravity:」により重加速度を指定する。「angle:」により砲丸の打ち上げ角度(仰角)を指定する。「initialVelocity:」により初速度を指定する。「position:」により指定時刻の砲丸の位置を返す。
軌跡をストロボ撮影風に表示する。「clock:」により位置計算の時間幅を指定する。「converter:」により座標系変換オブジェクトを指定する。「generator:」により軌跡オブジェクトを指定する。「show:」により時刻 0 から指定時刻までの物体の位置を clock: で指定した時間幅ごとに表示する。「clean」により表示した物体を消去する。
次に、(1) 砲丸の軌跡以外の軌跡オブジェクトを定義せよ。(2) 星の大きさや色が簡単に指定できるように MyPainter を工夫せよ。(3) 星以外の図形が簡単に指定できるように MyPainter を工夫せよ。
以上について、オブジェクトのクラスとメソッドの定義を全て印刷し、クラスやメソッドごとにコメントを手書きせよ。実行するための Workspace を作成し、そして、(1)〜と(3)の効果がわかるように実行画面を作成し、印刷せよ。
ヒント:Squeak の画面位置は、Point オブジェクトで指定する。たとえば、「a := StarMorph new」としたとき「a position: (Point x: 10 y: 20)」により、X座標とY座標を別々に指定することができる。ちなみに、その後「a openInWorld」とすると表示される。
注意:画面が星だらけになるといけないので、実行するまえにセーブをしておこう。
配列オブジェクトmy-array を、scheme 上に作成しよう。my-array は少なくとも次のメッセージが受理できること。
注意:第10回の「オブジェクト指向への接近」の節を参考にせよ。オブジェクト指向になっていない場合は、「誤り」となり、点数が伸びないので注意すること。
ソースプログラムと実行結果を印刷し、コメントを手書きせよ。とくに工夫した点がわかるように実行結果を示すこと。
英文は、名詞と動詞の並び順に規則があるが、さらに、名詞の形と動詞の形の間にも規則がある。たとえば、「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)とする。
レポートの体裁をなしていない場合、他人のプログラムや実行結果をコピーした場合、実行結果が捏造(ねつぞう)である場合は、レポート提出が無かったものとして扱う、すなわち、単位が出ない。まちがったことをしないように。
提出期限までの間、質問は受け付ける。課題について疑問などがあれば、気軽にどうぞ。