数理論理学 第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;
© Copyright 2024 ExpyDoc