情報実習II

数理論理学
第2回
Prolog プログラミング
© 加藤,高田,新出
7.2節(p. 169)
簡単なプログラ
ムによるProlog
プログラミング
7.3節(p. 177)
一般的な確定節
Prolog (Programing in logic)
1974年 マルセイユ大学 コルメラワにより開発
一階述語論理を基礎としたプログラ
ミング言語。
●
●
人工知能研究用言語の一つ。
人間の思考過程をプログラムに反
映できる。
●
Prolog (Programing in logic)
1974年 マルセイユ大学 コルメラワにより開発
一階述語論理を基礎としたプログラ
ミング言語。
●
本書を用いた講義の目的
Prolog の基礎である述語論理と
Prolog の動作原理である導出規則
の理解。
「ひろしがまる子の親である」という関係
Prologでは parent(hiroshi, maruko).
parent(sumire, maruko).
male(hiroshi).
female(sumire).
female(maruko).
?- parent(X, maruko).
X = hiroshi
準備作業とプログラムの作成
$ mkdir prolog
$ cd prolog
$ emacs sakurake.pl &
parent(hiroshi, maruko).
parent(sumire, maruko).
male(hiroshi).
female(sumire).
female(maruko).
parent(tomozou, hiroshi). プログラム作成
parent(kotake, hiroshi). ファイル名 sakurake.pl
parent(hiroshi, sakiko). (Windows のメモ帳の場合)ファイ
parent(sumire, sakiko). ルの種類「全てのファイル」
parent(hiroshi, maruko).
parent(sumire, maruko).
male(tomozou).
male(hiroshi).
female(kotake).
female(sumire).
female(sakiko).
female(maruko).
child(X, Y) :- parent(Y, X).
mother(X, Y) :- parent(X, Y), female(X).
準備作業とプログラムの実行
$ mkdir prolog
$ cd prolog
$ emacs sakurake.pl &
$ swipl
Welcome to SWI-prolog…
:
?- ['sakurake.pl'].
parent(tomozou, hiroshi).
parent(kotake, hiroshi).
parent(hiroshi, sakiko).
parent(sumire, sakiko).
parent(hiroshi, maruko).
parent(sumire, maruko).
事実節
male(tomozou).
male(hiroshi).
female(kotake).
female(sumire).
female(sakiko).
female(maruko).
child(X, Y) :- parent(Y, X).
mother(X, Y) :- parent(X, Y), female(X).
まる子がひろしの子供かどうか
child(tomozou, hiroshi).
child(kotake, hiroshi).
child(hiroshi, sakiko).
child(sumire, sakiko).
child(hiroshi, maruko). 事実節だけ
では、表現
child(sumire, maruko).
力に限界が
ある
ルールの導入
ボディー部
ヘッド部
child(X, Y) :- parent(Y, X).
X は Yの
子供である。
:な
ら
ば
Y が Xの親
確定節(プログラム節)
事実節も確定節の一種
?- listing.
parent(tomozou, hiroshi).
:
child(A, B) :parent(B, A).
mother(A, B) :parent(A, B),
female(A).
?- child(maruko, hiroshi).
true.
?- child(maruko, X).
X = hiroshi ;
X = sumire ;
条件のAnd合成
すみれ は まる子の母親である。
parent(sumire, maruko). では不十分!
mother(X,Y) :- parent(X,Y), female(X).
X は Yの
母親である。
な
ら
ば
X が Yの親であり、
かつ X が女性
?- listing.
parent(tomozou, hiroshi).
:
child(A, B) :parent(B, A).
mother(A, B) :parent(A, B),
female(A).
?- mother(sumire, maruko).
true.
?- mother(hiroshi, maruko).
false.
?- mother(X, maruko).
X = sumire ;
練習問題 条件のAnd合成の応用
さき子は、まる子の兄弟姉妹である。
sibling(X,Y) :- 条件1,条件2,…
ルールを作る方針
Xと Y
•X は、Z の子供である。
の親は
•Y は、Z の子供である。
•X と Y は違う人物である。同じ
X \= Y.
練習問題
実行結果
?- sibling(sakiko, maruko).
true.
?- sibling(maruko, maruko).
false.
?- sibling(X, maruko).
X= sakiko
練習問題 解答例
sibling(X, Y) :child(X, Z),
child(Y, Z),
X \= Y.
parent(tomozou, hiroshi).
parent(kotake, hiroshi).
parent(hiroshi, sakiko).
parent(sumire, sakiko).
parent(hiroshi, maruko).
parent(sumire, maruko).
事実節
male(tomozou).
male(hiroshi).
female(kotake).
female(sumire).
female(sakiko).
female(maruko).
child(X, Y) :- parent(Y, X).
mother(X, Y) :- parent(X, Y), female(X).
演習課題2
の準備
parent(tomozou, hiroshi).
:
parent(sumire, maruko).
parent(sakiko, tomohiro).
male(tomozou).
male(hiroshi).
female(kotake).
事実節の追加
female(sumire).
female(sakiko).
female(maruko).
male(tomohiro).
child(X, Y) :- parent(Y, X).
mother(X, Y) :- parent(X, Y), female(X).
演習課題2 条件のAnd合成の応用
ともひろは、まる子の甥である。
nephew (X,Y) :- 条件1,条件2,…
ルールを作る方針
•Y は、Z の兄弟姉妹である。
•X は、Z の子供である。
•X は、男性である。
演習課題2
実行結果
?- nephew(tomohiro, maruko).
true.
?- nephew(tomohiro, sakiko).
false.
?- nephew (tomohiro, X).
X= maruko;