2009年7月5日日曜日

【LPN】1: Facts, Rules, and Queries

あ、さきほどのエントリで、ペーパーバック版とオンライン版が内容は同一と書きましたが違いました。ペーパーバック版はもう一段改訂されています。


* 1 Facts, Rules, and Queries
** 1.1 Some simple examples
*** 1.1.1 Knowledge Base 1
- KB1はfactsのcollection。
- プロンプトから質問するとKB1の知識に基づいた
true/falseが返ってくる。これがPrologの使いかた。
*** 1.1.2 Knowledge Base 2
- 一度ロードしたKBのクリアの仕方がわからない。
- KB2はfactsとrulesを含む。
- ruleの形式。
head :- body
- KBに含まれたfactsとrulesとを、まとめてclausesと
呼ぶ。
- factの前半、すなわち、
listensToMusic(mia).
のlistensToMusicの部分を、predicate、procedure
と呼ぶ。factsはpredicatesの定義であるともいえる。
- factsは、body無しのrulesと見ることもできる。
*** 1.1.3 Knowledge Base 3
- ruleのbodyは、別名、goalとも呼ぶ。
- ","はand、";"はor。":-"はimplication。
*** 1.1.4 Knowledge Base 4
- queryにはvariableが使える。variableは大文字で書
く。
- variableを使うと、それにマッチするもの(unify可能
なもの)を探す。マッチするものがみつかったときに
は、"Prolog instantiates X to mia."や"Prolog
binds X to mia."などと言う。
- ";"を入力すると他のマッチを探して探索を継続する。
*** 1.1.5 Knowledge Base 5
- ruleの記述にvariableを使うことができる。これは
predicateの概念(関係)を表すものであり、general
statementと呼ぶ。
** 1.2 Prolog Syntax
- facts,rules,queriesを構成するものは何か。
- それはterms(語、語句、項)である。
- Prologでは、termsは4つに分類できる。atoms,
numbers, variables and complex terms。
- atomsとnumbersとをまとめてconstantsと呼ぶ。
- constantsとvariablesとによってPrologのsimple
termsが構成される。
- termsそれぞれの構成物はthe basic characters(or
symbols)である。termsはそれらのstringsである。
*** 1.2.1 Atoms
- アトムとして適格なのはつぎの3つ。
- 小文字ではじまるもの。(ただし記号はunder
scoreだけ)
butch
m_monroe2
- シングルクォートで囲まれたもの。
'Five_Dollar_Shake'
'hoge piyo 3 !'
- a string of special characters.
:-
@=
;
====>
- ここで3つ目の適用範囲がわからない。予約されたも
のに限るのか、記号のみからなる文字列はみなそう
なのか。
*** 1.2.2 Numbers
- Prologでも浮動小数点を扱えるが、Prologらしいプ
ログラムではあまり使わない。なのでこの本では割
愛するらしい。
- 整数は個数をかぞえるのに使うのでこの本でやる。
termsとしての例は次のとおり。
23
1001
0
-365
*** 1.2.3 Variables
- Atomsの第一の様式で、頭が大文字かアンダースコア
のもの。例は次のとおり。
X
Variable
_tag
List
- _は特別なもの。the anonymous variableという。無
名変数(変項)という訳かな? これはconstant
variablesに匹敵する用語かも。
*** 1.2.4 Complex terms
- complex termsは、atoms、numbers、variablesを部
品としてつくる。
- complex termsはfunctorをつかってつくる。様式は
次のとおり。

functor(arguments)

- functorはatomでないといけない。
- argumentsはargumentを,で区切って列記する。
argumentはtermならなんでもよい。
- ここでのfunctorは関手じゃないんだろうな。きっと。
precicatesを表わすatomのことかな。

- complex termsは、別名structuresとも言う。

- より複雑なcomplex termsは入れ子にすることによっ
てできる。例は次のとおり。

hide(X,father(father(father(butch))))

- argumentsの個数をそのcompex termsのarityと言う。
functor/nと表記することがある。

happy/1

- happy/1,happy/2のようにarityが違えば、functorの
atomが同じであっても別のpredicatesとPrologは認
識する。
** 1.3 Exercises
- Exercise 1.1
- 1. atom
- 2. variable
- 3. atom
- 4. variable
- 5. atom
- 6. atom
- 7. neither
- 8. atom
- 9. variable
- 10. atom
- Exercise 1.2
- 1. loves/2
- 2. atom
- 3. not term
- 4. boxer/1
- 5. and/2
- 6. and/2
- 7. not term
- 8. not term
- 9. not term
- 10. not term
- Exercise 1.3
- 7 clauses
- 3 facts
- 4 rules
- head person(X) goals man(X); woman(X)
- head loves(X,^) goals knows(Y,X)
- head father(Y,Z) goals man(Y), son(Z,Y)
- head father(Y,Z) goals man(Y),
daughter(Z,Y)
- Exercise 1.4
- 1. Butch is a killer.
killer(butch).
- 2. Mia and Marcellus are married.
married(mia, marcellus).
- 3. Zed is dead.
isDead(zed).
- 4. Marcellus kills everyone who gives Mia a
footmessage.
kills(marcellus,X) :- givesFootmassage(X,mia).
- 5. Mia loves everyone who is a good dancer.
loves(mia,X) :- isGoodDancer(X).
- 6. Jules eats anything that is nutritious or
tasty.
eats(jules,X) :- isNutritious(X); isTasty(X).
- Exercise 1.5
- 1. true.
- 2. false.
- 3. false.
- 4. false.
- 5. true.
- 6. Y = ron; Y = harry.
- 7. false.
** 1.4 Practical Session 1
- 問題なし。ただし、KBをクリアする方法は早く知り
たい。

PrologはPrologでおもしろそう。
こつこつ。

0 件のコメント: