第11回 Prolog の概要(6月28日)

今日の課題

■ Prolog の操作

処理系

本演習では、SWI-Prolog という処理系を使用する。SWI-Prolog は、Linux 版と Windows 版の両方が存在する。Web ページからダウンロードして、自分のパソコンで使用できるようにしておこう。

  http://www.swi-prolog.org/ 

基本操作

  1. 起動: コンソール上で、次のコマンドを実行
    pl
    
  2. プログラムのロード: Prolog コンソール上で以下を実行
    ?- ['ファイル名'].
    
  3. 終了: Prolog コンソール上で、Control-d と押す。

プログラムの例

プログラムは、emacs などのエディタを用いて作成する。以下に例を示す。
%-*-prolog-*-
% list1101.pl

% 犬
dog('ミニチュア・ダックスフント').
dog('ミニチュア・シュナウザー').
dog('ポメラニアン').
dog('パピヨン').
dog('トイプードル').
dog('ウェルシュ・コーギー・ベンブローク').
dog('アメリカン・コッカー・スバニエル').

% 好み
like(taro,X) :- dog(X).

% はコメントの始まりを表す記号である。

1行目の -*-prolog-*- は、emacs でのプログラミングを楽にするためのおまじないである(M-x prolog-mode の効果がある)。emacs を使わない場合は不要である。

5〜11行目は、dog についての知識である。14行目は、like (好み)についての知識である。



練習1

まず、emacs を使って、上記のプログラムを入力しよう。セーブする際、ファイル名は「list1101.pl」とせよ。次に、コンソール上で、SWI-Prolog を起動せよ。それから、上記プログラムをロードせよ。ロードに成功すると「% list1101.pl compiled 0.00 sec 648 bytes」「Yes」と表示される(bytes数の違いはあるかもしれないが)。「ERROR:…」のように表示された場合は、入力にミスがあるので、エラーメッセージをよく読み、修正しよう。

■ Prolog の文法

知識(プログラム)

■ 質問

Prolog には2とおりの質問がある。

例題1

動作確認として以下を実行してみよう。
?- dog('パピヨン').
?- dog(X).

1行目は、「質問1」である。Yes か No という返事が返る。

2行目は、「質問2」である。変数 X に該当するものが返る。セミコロンキーを押すと、X に該当するものが次々と表示され、Enter キーを押すと X が定まる。全ての該当するものが表示されると、それ以上に答がないので、No という返事が返る。

練習2

list1101.pl に次の事実を追加して、list1102.pl を作成しよう。

たとえば、small('パピヨン'). により、'パピヨン'が小型であるという事実を表すこができる。

動作確認として、次の実行をしてみよう。
?- dog('パピヨン').
?- small('パピヨン').
?- middle('パピヨン').

質問に対しては、Yes か No が返される。

例題2

複数の条件で質問をしてみよう。

?- dog(X), middle(X). ← 中型の犬という意味になる。
?- small(X), dog(X).  ← 小型の犬という意味になる。
?- dog(X), middle(X), dog(Y), small(Y).

変数を使った質問なので、変数に該当するものが返される。セミコロンのキーを押すと、別の答えが返される。

■ 規則の作成

前半で示した like(taro,X) :- dog(X). は規則である。この意味は、「taro は犬が好き」、「taro が好きなものに、犬がある」である。しかし、計算機は、こうした日本語の意味を関知しておらず、単に、「 like(taro,X) が true になるには、 dog(X) が true にならなければならない」とだけ知識にしており、「like」についての質問があると、「:-」の右辺の成立を確認して、「Yes/No」を返している。

規則の書き方について、直観的な説明をするとすれば、『「:-」の右側に質問を記述し、左側にはその呼出し名を記述せよ』ということになる。

例題3

「hanako は、中型の犬が好き」という規則をlist1102.plに追加しよう。
(list1102.pl の末行)
like(hanako,X) :- dog(X), middle(X).

練習3

list1102.pl に次の事実と規則を追加して、list1103.pl を作成しよう。

次の質問をしてみよう

□ 小レポート

list1103.pl に次の事実と規則を追加して、prac1101.pl を作成しよう。

ヒント:'パピヨン' の体重を尋ねる質問は「?- weight('パピヨン',W).」である。'パピヨン' の体重が 3kg 以上であるか否かを尋ねる質問は、「?- weight('パピヨン',W), 3 =< W.」である。

実行結果として、次の質問の結果を示せ。

  1. 「goro の好きなものは何ですか?」
  2. 「rokuro の好きなものは何ですか?」
  3. 「goro と rokuro が共に好きなものは何ですか?」

小レポートには、「プログラムソース」、「手書きのコメント(何が事実で、何が規則か。規則はどんな意味か。)」、「上記3点の実行結果の画面」、「実行結果への手書きのコメント」を記載すること。


(c) 2008.6.24 by tokuhisa