2015-11-12 67 views
1

我有一個非常簡單的序言。我將它編譯成swi-prolog,並提供一個非常簡單的問題。這是我的序言。在SWI Prolog中顯示所有結果

isa(bird, animal). 
isa(robin, bird). 
isa(fish, animal). 
isa(cod, fish). 
isa(mammal, animal). 
isa(lion, mammal). 
isa(horse, mammal). 
isa(bat, mammal). 
isa(pipistrelle, bat). 
isa1(X,Y) :- isa(X,Y). 
isa1(X,Z) :- isa(X,Y), isa1(Y,Z). 

我的問題是,當我運行以下問題;

isa(pipistrelle, O). 

swi-prolog僅顯示以下內容;

O = bat. 

我想顯示像所有的可能性:

O = bat; 
O = mammal; 
O = animal 

你能幫我在這一點上,謝謝。

+0

我的錯,我應該有運行isa1(pipistrelle,O)提問;之後爲每個答案。 –

回答

1

你調用isa/2謂詞,但你應該調用,而不是isa1/2斷言,這是一個執行傳遞閉包的ISA關係:

?- isa1(pipistrelle, O). 
O = bat ; 
O = mammal ; 
O = animal ; 
false.