Nova的科學反主流學院 

反主流的精神在於不屈於大環境, 本站旨在提供輕鬆自學各種科學。

Prolog教學-基本關係判斷-誰是爺爺?

f:id:immortalnova:20160506231347p:plain

 

 

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的情況 (安裝教學參考此篇)

就可以對這個檔案點兩下執行,接著應該會跳出以下的視窗:

f:id:immortalnova:20160506223952p:plain

?- 後面黑色框框就是可以輸入問題的地方,我們可以把以下問題先貼進去

 

grandfather(X,空條承太郎).

 如下圖,再按下Enter把問題送出。 

f:id:immortalnova:20160506224005p:plain

 就會發現Prolog回答我們X是多少,也就是'空條承太郎'的爺爺是誰

f:id:immortalnova:20160506224012p:plain

 發現Prolog會告訴我們答案是喬瑟夫·喬斯達。

 

當然,以上的例子因為很簡單,人類一眼就看得出來答案,

但是,當問題非常複雜的時候,比如說你把整個族譜都輸入進去的情況,

Prolog就非常有用了!