第14回 最終課題の出題

今日の課題

■ 最終課題の要領

課題の選択

以下の3つのうち1つを選択せよ.

提出内容

以下をレポートにまとめて,提出せよ.

  • 第1章:プログラムの概要(選択した課題,オプションはどこまで作成するか.)
  • 第2章:プログラムの特徴(作成したプログラムの特徴・工夫した点,使用した言語の特徴がどのように活かされたか,など)
  • 第3章:実行結果(入出力のデータ/ファイル(生データと説明文),プログラムの実行の様子(画像や出力文字列と説明文),使用した言語の特徴の表れる動作結果(生の出力と説明文))
  • 第4章:感想(今後,挑戦したいこと,演習でとりあげて欲しかったこと,その他)※ 感想は,採点に関係ありません.
  • 付録:ソースコード(自身の作成したプログラムコード,コメントは手書きする必要はない)
  • 提出要領

    提出締切り:8月22日(火)17時・必着
    提出方法:以下のいずれかによる.
    (1) 計算機工学講座Cに設置の提出箱
    (2) 電子メールの添付ファイルによる送付(report-tokuhisa@water.ike.tottori-u.ac.jp)/1つのPDFファイルにまとめることが望ましい.それが不可能な場合は,MS Word,一太郎,platex,プレーンテキストのいずれかによる.platex が正しく変換できない場合,レポートが採点されないことがあるので注意すること.
    (3) 郵送による送付(〒680−8552 鳥取大学 工学部 知能情報工学科 計算機工学講座C 徳久雅人)

    ■ 処理系のダウンロード

    Windows 上で Squeak,Scheme,Prolog を実行することができる.ダウンロードのためのリンクを以下に紹介する.

    ■ 課題説明

    Squeak:ダイヤモンドダストの表示

    ダイヤモンドダストは,降る雪の結晶が光を反射することで,キラキラした情景になることをいう.Squeak の既存の図形オブジェクトを駆使し,キラキラと雪の落ちる状況を再現しよう.

    StarMorph をはじめ類似の図形の中から,適当と思われるものを選択する.

    そのオブジェクトの表示位置を時間経過にともない変化させる.

    キラキラした様子を作るために,オブジェクトの表示半径をランダムで変えてみる.

    複数オブジェクトの管理,並列処理,オブジェクトの継承などを上手に使おう.

    以上は必須である〔25点〕.オプション課題として,その他のアイデアにより,楽しい情景を描くプログラムを作ろう(バックに流れ星を表示させたり,オーロラを表示させたり,…)〔5点〕.

    Scheme:関数型言語によるオブジェクト指向プログラミング〜リスト構造

    Listオブジェクトを scheme 上に作成しよう.List オブジェクトは少なくとも次のメッセージが受理できること.

    1. add 〈要素〉:リストの末尾に〈要素〉を追加する.
    2. put_at 〈要素〉〈番号〉:指定番目に要素を与える.
    3. get_at 〈番号〉 :指定番目の要素を返す.
    4. shift:リストの先頭の要素を返し,残りの要素列を新たなリストとする.
    5. member 〈要素〉:リスト内に同一の要素が存在するならば真を返しそうでなければ偽を返す.
    6. append 〈リストオブジェクト〉:自身のリストに,指定のリストを結合した結果のオブジェクトを返す.
    7. sort :リスト内の要素として数字を前提とし,その大小関係に基づき並び変える.その結果を新しいオブジェクトとして返す.
    8. each 〈関数〉:リスト内の要素の1つ1つを〈関数〉に適用し,最後の適用結果を返す.

    以上は必須である〔25点〕.オプション課題として,sort において,〈比較関数〉を指定することで,数字以外を要素とするリストでも比較のできるようにする〔5点〕.

    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 となるように規則を作成しよう〔25点〕.

    さらに,オプション課題として,疑問文,否定文,命令文,副詞(sometimesなど),比較級,最上級など幾つかの英文法について解析できるように規則を作成しよう.〔5点〕.


    (c) 2006.7.19 by tokuhisa