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

今日の課題

■ Prolog の操作

SWI-Prolog の基本操作

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

SWI-Prolog は,Windows版も存在する.Web からダウンロードして自分の ノートパソコンにインストールしておこう.⇒ SWI-Prolog

プログラムの例

プログラムは,emacs などのエディタを用いて作成する.以下に例を示す.

fruit(apple).
fruit(orange).
fruit(pineapple).
fruit(lemon).
red(apple).
yellow(orange).
yellow(lemon).
yellow(pineapple).
like(taro,X) :- fruit(X).
like(hanako,apple).

練習1

上記のプログラムを入力し list1101.pl というファイル名でセーブしよ う.そして,Prolog を起動し,ロードしてみよう.

■ Prolog の文法

プログラム

■ Prolog の実行

質問

Prologを起動すると, ?- というプロンプトが表示される.ここ には質問を記入する.

練習2

list1101.pl をロードした後,以下を実行してみよう.事実として定 義されているところは,Yes となり,そうでないところは No となる.

?- fruit(apple).
?- fruit(orange).
?- fruit(melon).

変数を使って質問しよう.X に適切なものがバインドされて,答えが得ら れる.リターンキーを押すと,質問が終了する.セミコロンを押すと,別の答 えが得られる.これ以上に別の答えが存在しないときにセミコロンを押すと No となる.

?- fruit(X).
?- yellow(X).

規則で定義された部分も同様に質問できる.like(taro,apple)と 質問があると,内部では,likeの事実や規則のヘッド(:-の左辺に注目)から, マッチするものを探し,事実がマッチすれば,それが答えとなり,また,規則 がマッチすると,規則のボディ(:-の右辺に注目)の全ての項が真であるかど うかをさらに質問し,成立すればその過程でマッチした内容が答えとなる.

?- like(taro,apple).
?- like(taro,melon).
?- like(taro,X).
?- like(X,apple).

いわゆる AND 検索もできる.

?- fruit(X), yellow(X).

■ 小レポート

list1101.pl を次のように拡張しよう.そのプログラムファイルを prac1101.pl とする.

  1. 果物を10個事実として登録する.
  2. その果物の色を事実として登録する.
  3. 野菜を10個事実として登録する.
  4. その野菜の色を事実として登録する.
  5. 「taro は全ての果物が好き」という規則が既に登録されている.これを 参考に,「taro は黄色の野菜が好き」という規則を登録する.
  6. 「hanako は apple が好き」という規則が既に登録されている.さらに, 「hanako は全ての野菜が好き」という規則を登録する.

以下の質問をしよう.

  1. taro の好きな野菜は何か?
  2. 赤い物が好きな人は誰か?

小レポートは,prac1101.pl を印刷して事実や規則のある程度のまとまり ごとにコメントを手書きし,更に,質問の内容,実行方法,実行結果をそえて 提出せよ.


(c) 2006.6.27 by tokuhisa