第11回 Prologの概要 (6月29日)
今日の課題
■ Prolog の操作
SWI-Prolog の基本操作
- 起動: コンソール上で,次のコマンドを実行. pl
- プログラムのロード: Prolog上で,次の形式で実行. ['ファイル名'].
- 終了: 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
上記のプログラムを入力し lect1101.pl というファイル名でセーブしよ
う.そして,Prolog を起動し,ロードしてみよう.
■ Prolog の文法
項
- 整数: 0,1,-123
- 小数点数: 1.23,-4.56,4.5e-6
- アトム: 小文字アルファベットで始まる英数字列( _ も可)
- 変数: 大文字アルファベットで始まる英数字列( _ も可)
- 複合項:
- 引数付きアトム: fruit(apple),like(taro,X)
- リスト: [1,2,3]
- 演算: 3 + 1,2 < 1(偽となる)
プログラム
- 事実: P. の形式.P とマッチすることは真.fruit(apple).
- 規則: P :- Q,R,…,S. の形式.Pは,Q,R,…,Sが真ならば,真.like(taro,X) :- fruit(X).
■ Prolog の実行
質問
Prologを起動すると, ?- というプロンプトが表示される.ここ
には質問を記入する.
- 質問1: 変数を使わずに項を入力する.
- 質問2: 変数を使って項を入力する.
練習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 検索もできる.
■ 小レポート
list1101.pl を次のように拡張しよう.そのプログラムファイルを
prac1101.pl とする.
- 果物を10個事実として登録する.
- その果物の色を事実として登録する.
- 野菜を10個事実として登録する.
- その野菜の色を事実として登録する.
- 「taro は全ての果物が好き」という規則が既に登録されている.これを
参考に,「taro は黄色の野菜が好き」という規則を登録する.
- 「hanako は apple が好き」という規則が既に登録されている.さらに,
「hanako は全ての野菜が好き」という規則を登録する.
以下の質問をしよう.
- taro の好きな野菜は何か?
- 赤い物が好きな人は誰か?
小レポートは,prac1101.pl を印刷して事実や規則のある程度のまとまり
ごとにコメントを手書きし,更に,質問の内容,実行方法,実行結果をそえて
提出せよ.
(c) 2006.6.27 by tokuhisa