知能プログラミング演習I・前半講義 Prolog演習:掲示板
この演習では,Prolog言語の基本を学びながら,論理プログラミングと知能プログラミングの方法を学びます.
- 講義と演習を毎回半分づつ行ないます.
- 講義では演習のポイントのみを解説しますので,教科書の該当ページを予習・復習し,演習問題を解き,レポートとして提出して下さい.
- レポートの課題は,教科書の中から出しますが,このページの下のレポート課題の箇所に発表しますので,注意して下さい.
- ときおり,復習のための小テストを行う場合があります.ただプログラムが出来るだけでなく,内容の理解を心がけて下さい.
成績はレポート(及び小テスト)で評価します.これ以外の試験はしません.
※注意:日程や内容は変更される場合があります.
- 第0回:
- 講義+演習の進め方説明
- レポート出題
- SWI-Prologの起動確認
- 第1回:
- 講義(導入,テキスト1章 Prologの概観,テキスト2章 Prologプログラムの構文と意味)
- レポート出題
- 練習1.2 (教科書p.6)
- 練習1.5 (教科書p.12)
- 練習1.6 (教科書p.18)
- 練習2.1 (教科書p.34)
- 練習2.3 (教科書p.40)
- 練習2.5 (教科書p.40)
- 第2回:
- 講義(テキスト3章 リスト,オペレータ,算術演算)
- 問題3.1 (教科書p.72)
- 問題3.2 (教科書p.73)
- 問題3.4 (教科書p.79)
- 問題3.9 (教科書p.79)
- 第3回:
- 講義(テキスト3章 リスト,オペレータ,算術演算)
- レポート出題
- 問題3.8 (教科書p.79)
- 問題3.11 (教科書p.80)
- 問題3.12 (教科書p.85)
- 問題3.21 (教科書p.92)
- 問題3.9-別解
- 第4回:
- 講義(テキスト4章 構造の利用と例題プログラム)
- レポート出題
- 問題4.2 (教科書p.98)
- 問題4.5 (教科書p.105)
- 第5回:
- 講義(テキスト5章 バックトラックの制御)
- レポート出題
- 問題5.2 (教科書p.133)
- 問題5.3 (教科書p.133)
- 問題5.6 (教科書p.137)
- 第6回:
- 講義(テキスト6章 入出力)
- 問題6.2 (教科書p.153)
- 問題6.3 (教科書p.155)
- 第7回:
- 講義(テキスト7章 その他の組込み手続き)
- 問題7.3 (教科書p.175)
- 問題7.5 (教科書p.175)
- 問題7.8 (教科書p.185)
注意事項
- プログラムを作成する問題については,実際にプログラムを実行し動作例をいくつか挙げて考察する
こと.
- 考察は問題毎に行いましょう.
- レポートはそのまま実行できる形で提出して下さい.(考察などの文章,実行結果等はコメントアウト
する)(テンプレート)
課題 rep07::提出〆切 2024年06月3日 17時
- 注意:
- 述語 memberを用いて解答を作成する場合は教科書p.69の定義を用いて,述語名を"mem" とせよ.
- traceを用いて実行過程の追跡を行うこと.こちらを参照
問題7.3 (教科書p.175)
- 述語ground(Term)を,具体化されていない変数がTermに含まれない
- なら真となるように定義せよ.※ただし,組み込み述語にgroundが
- 定義されているので,gndとして定義せよ.
問題7.5 (教科書p.175)
- subsumes(Term1,Term2)
- という関係を,Term1がTerm2と等しいか一般的であるように定義せよ.
- たとえば,
- ?- subsumes(X,c).
- yes
- ?- subsumes(g(X),g(t(Y))).
- yes
- ?- subsumes(f(X,X),f(a,b)).
- no
- つまり,subsumes(Term1,Term2)は以下の式を満足するときに真を
- 返す述語とする.
- HB(Term1)⊇HB(Term2)
- ここでHB(T)は項Tのエルブラン基底の集合を表す.
- ただし,組み込み述語にsubsumesが定義されているので,
- subsumeとして定義せよ
-
- ヒント:
- 項の構造に注目して問題の宣言的意味を満足するようにプログラム
- すると良い.(エルブラン領域を手続き的に求めて集合の大小関係
- を比較しようとする場合,HBは一般的に無限となり得るため,解法
- として適さない.)
問題7.8 (教科書p.185)
- 与えられた集合(集合はリストで表わされるとする)のすべての部分集合の集合を
- 計算するために,関係powerset(Set,Subsets)をbagofを用いて定義せよ
-
- rep03問題3.8で作成した部分集合を生成する述語subsを用いて定義すること
- 注意:
- レポートは出題された問題すべてをまとめて1通のメールで提出すること.複数回に分けた場合,上書きされて最後の送信のみが有効となる.
- また,traceを用いて実行過程の追跡を行うこと.こちらを参照
- レポートは,電子メールでのみ提出することが出来ます.
レポートの提出先メールアドレスはです.
- メールのサブジェクトは指示通り,半角でrepXX (XXは回数,例えば第一回目ならrep01) とすること.
-
(初回は特に)学籍番号と氏名は間違えないように記入をお願いします.
- 解説/考察,実行結果の部分は全てコメントアウトとし,メールのヘッダを取り除いたものが,実行可能となるように作成すること.
- 二度同じサブジェクトでレポートを提出すると上書きされ,先に提出したものは失われます.(必ず,控えを残しておいて下さい)
- メールの形式は html形式ではなく,テキスト形式
で送信すること.特に,エディタ等からコピー&ペーストする際は,先にメーラー側で「プレーンテキストに切り替える」設定を行い,その後ペーストしないと,正しく受信されないことがあります.
- 正常に受理された場合はその旨が記載された自動返信メールが送信されます.提出後にはレポート提出状況と併せて返信メールを確認すること.
- 誤ったサブジェクトのメールは送り返されますが,誤って過去のレポート番号で送った場合は,そのレポートが失われます.
- 演習に関する質問は,レポート提出用のアドレスには送らないこと.(repXX のサブジェクトでメールを送ると,レポートとして受理されます.質問などは,へ出すこと)
- 必ず情報基盤センター学生メールのアカウント(@stn.nitech.ac.jp)から提出すること.(研究室,プロバイダ等の アカウントからの提出は受理されません)
- ピリオド(.) だけの行をレポート途中に入れると,返信メールでのレポート内容がそこで途切れてしまいます.
ただし,受理されたレポートの方は途切れていませんので心配無用です.
- レポートの書き方は,こちらを参考に,正しく分かり易いレポートを心がけること.(テンプレートファイル)