Prolog教學-基本關係判斷-誰是爺爺?
Prolog厲害的地方就是可以透過我們給予的資訊,自己去找關連性,
我們只要負責問問題就好,
比如說我們以漫畫作品JoJo的奇妙冒險為例
(這裡請任意挑自己喜歡作品的名稱放)
首先我們先開起任意一個文字編輯軟體,記事本也可以,
將以下的程式貼進去,並且存成 .pl 檔案。
father('喬瑟夫·喬斯達','荷莉').
mother('絲吉Q','荷莉').
mother('荷莉','空條承太郎').
grandfather(X,Y):-
father(X,Z),father(Z,Y);
father(X,Z),mother(Z,Y).
grandmother(X,Y):-
mother(X,Z),father(Z,Y);
mother(X,Z),mother(Z,Y).
最上面的意思是:
father('喬瑟夫·喬斯達','荷莉'). 意思是 '喬瑟夫·喬斯達' 是 '荷莉' 的爸爸
而加上mother的意思就是前面的名字是後面的媽媽
記得中文字要用' '兩個單引號夾住,否則Prolog無法讀取
接著這邊是定義,怎樣才算是爺爺,
先不管是爸爸這邊還是媽媽那邊,先把爸爸的爸爸和媽媽的爸爸都稱呼爺爺
所以可以這樣定義
grandfather(X,Y):-
father(X,Z),father(Z,Y);
father(X,Z),mother(Z,Y).
第一行表示X是Y的爺爺該怎麼定義 記得後面要加:- 這兩個符號才有用
grandfather(X,Y):-
第二行表示,X是Z的爸爸,Z又是Y的爸爸,所以X是Y的爺爺
father(X,Z),father(Z,Y);
第三行表示,X是Z的爸爸,Z又是Y的媽媽,所以X是Y的爺爺
father(X,Z),mother(Z,Y).
記得最後一個要加 . (句號),前面到倒數第二個都要加 ; (分號)
有安裝好Prolog的情況 (安裝教學參考此篇)
就可以對這個檔案點兩下執行,接著應該會跳出以下的視窗:
?- 後面黑色框框就是可以輸入問題的地方,我們可以把以下問題先貼進去
grandfather(X,空條承太郎).
如下圖,再按下Enter把問題送出。
就會發現Prolog回答我們X是多少,也就是'空條承太郎'的爺爺是誰
發現Prolog會告訴我們答案是喬瑟夫·喬斯達。
當然,以上的例子因為很簡單,人類一眼就看得出來答案,
但是,當問題非常複雜的時候,比如說你把整個族譜都輸入進去的情況,
Prolog就非常有用了!