知能プログラミング演習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)

注意事項


レポート課題

課題 rep01::提出〆切 2024年04月22日 17時

  練習1.2 (教科書p.6) parent関係に関する次の質問をPrologで表せ.

    a) Patの親は誰か.
    b) Lizは子どもをもつか.
    c) Patの祖父母は誰か


  練習1.5 (教科書p.12) parentとsisterという関係を用いてaunt(X,Y)を定義せよ.

    ヒント: aunt関係に対して図1.3の形式のグラフを書くと分かりやすい.


  練習1.6 (教科書p.18) 次に示すもう1つのpredecessor関係の定義について考察せよ.

      predecessor2(X,Z) :-
        parent(X,Z).

      predecessor2(X,Z) :-
        parent(Y,Z),
        predecessor2(X,Y).

    ヒント:
      これもpredecessorの適切な定義と思えるだろうか.
      図1.7のグラフを修正してこの新しい定義とそのグラフが対応するようにできるだろうか.

※注意事項:
図1.8の例題を参照して演習を行うこと
SWI-Prologにはdifferentは定義されていないため,図1.8の例題 プログラムに加えて以下のルールを追加すること.

  different(X,Y) :- X \== Y.

練習1.6 では 図1.8の例題と述語名を変更すること

  (例) predecessor => predecessor2


  問題2.1 (教科書p.34)

  次のどれが構文的に正しいPrologオブジェクトであるか.
  それらはどんな種類のオブジェクト(アトム,数,変数,構造)か.

(a)Diana
(b)diana
(c)'Diana'
(d)_diana
(e)'Diana goes south'
(f)goes(diana,south)
(g)45
(h)5(X,Y)
(i)+(north,west)
(j)three(Black(Cats))

  問題2.3 (教科書p.40)

  次のマッチング操作は成功するか失敗するか.
  成功するなら,結果としてどのような変数の変数の具体化が得られるか.

(a)point(A,B)=point(1,2)
(b)point(A,B)=point(X,Y,Z)
(c)plus(2,2)=4
(d)+(2,D)=+(E,2)
(e)triangle(point(-1,0),P2,P3)=triangle(P1,point(1,0),point(0,Y)) この結果得られる具体化は三角形のあるクラスを定義する.この三角形がどのようなものかを記述せよ.

  問題2.5 (教科書p.40)

  矩形がrectangle(P1,P2,P3,P4)という項で表現されていると仮定せよ.
 ただしPは矩形の頂点で,正方向に順序づけられているとする.
 Rが水平と垂直な辺をもった矩形である場合に真となる関係

regular(R)
を定義せよ.
注意:
レポートは出題された問題すべてをまとめて1通のメールで提出すること.複数回に分けた場合,上書きされて最後の送信のみが有効となる.
また,traceを用いて実行過程の追跡を行うこと.こちらを参照

レポートの提出方法 (重要)