本演習では、SWI-Prolog という処理系を使用する。SWI-Prolog は、Linux 版と Windows 版の両方が存在する。Web ページからダウンロードして、自分のパソコンで使用できるようにしておこう。
http://www.swi-prolog.org/
pl |
?- ['ファイル名']. |
プログラムは、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 (好み)についての知識である。
まず、emacs を使って、上記のプログラムを入力しよう。セーブする際、ファイル名は「list1101.pl」とせよ。次に、コンソール上で、SWI-Prolog を起動せよ。それから、上記プログラムをロードせよ。ロードに成功すると「% list1101.pl compiled 0.00 sec 648 bytes」「Yes」と表示される(bytes数の違いはあるかもしれないが)。「ERROR:…」のように表示された場合は、入力にミスがあるので、エラーメッセージをよく読み、修正しよう。
Prolog には2とおりの質問がある。
動作確認として以下を実行してみよう。
?- dog('パピヨン'). ?- dog(X). |
1行目は、「質問1」である。Yes か No という返事が返る。
2行目は、「質問2」である。変数 X に該当するものが返る。セミコロンキーを押すと、X に該当するものが次々と表示され、Enter キーを押すと X が定まる。全ての該当するものが表示されると、それ以上に答がないので、No という返事が返る。
list1101.pl に次の事実を追加して、list1102.pl を作成しよう。
たとえば、
動作確認として、次の実行をしてみよう。
?- dog('パピヨン'). ?- small('パピヨン'). ?- middle('パピヨン'). |
質問に対しては、Yes か No が返される。
複数の条件で質問をしてみよう。
?- dog(X), middle(X). ← 中型の犬という意味になる。 ?- small(X), dog(X). ← 小型の犬という意味になる。 ?- dog(X), middle(X), dog(Y), small(Y). |
変数を使った質問なので、変数に該当するものが返される。セミコロンのキーを押すと、別の答えが返される。
前半で示した
規則の書き方について、直観的な説明をするとすれば、『「:-」の右側に質問を記述し、左側にはその呼出し名を記述せよ』ということになる。
「hanako は、中型の犬が好き」という規則をlist1102.plに追加しよう。
(list1102.pl の末行) like(hanako,X) :- dog(X), middle(X). |
list1102.pl に次の事実と規則を追加して、list1103.pl を作成しよう。
次の質問をしてみよう
ヒント:like(ichiro,X), like(jiro,X), dog(X) の3つが同時に true になるもの
list1103.pl に次の事実と規則を追加して、prac1101.pl を作成しよう。
種類 | 体高 | 体重 |
---|---|---|
ミニチュア・ダックスフンド | 15 cm | 4.8 kg |
ミニチュア・シュナウザー | 35 cm | 7 kg |
ポメラニアン | 20 cm | 3 kg |
パピヨン | 28 cm | 4.5 kg |
トイプードル | 28 cm | 5 kg |
ウェルシュ・コーギー・ペンブローク | 30.5 cm | 13.5 kg |
アメリカン・コッカー・スパニエル | 38 cm | 13 kg |
参考:Goo のペット図鑑、http://channel.goo.ne.jp/pet/zukan
事実は、名前と数値を第一、第二引数とする。たとえば、height('パピヨン', 28). と weight('パピヨン', 4.5). とする。単位は入力しない。
ヒント:'パピヨン' の体重を尋ねる質問は「
実行結果として、次の質問の結果を示せ。
小レポートには、「プログラムソース」、「手書きのコメント(何が事実で、何が規則か。規則はどんな意味か。)」、「上記3点の実行結果の画面」、「実行結果への手書きのコメント」を記載すること。