2012-04-14 22 views
0

我試圖打印所有用於獲取查詢解決方案的事實,並且如果統一失敗,我希望不打印任何內容。所以,我寫這篇文章:如何獲取用於在Prolog中獲取查詢解決方案的所有事實?

a:- 
    b,c,writeln(b^c->a). 
b:- 
    d,writeln(d->b). 
c:- 
    fail,writeln(e->c). 
d:- 
    writeln(d). 
a:- 
    b,d,writeln(b^d->a). 

然而,當我查詢a.,我得到了以下輸出黯然:

d 
d->b 
d 
d->b 
d 
b^d->a 
true. 

似乎有人告訴我,Prolog有一個內置的機理來顯示所有的用來做查詢的事實。他是真的嗎?我怎樣才能得到正確的輸出?

回答

1

您的程序沒有變量,因此沒有統一。

編輯:或者更好,在抽象意義上說,Prolog的Horn子句統一當前目標與每個規則頭的列表之間進行選擇。但是實際的Prolog用索引取代了選擇階段,爲了性能,並且試圖統一參數。

當你調用a,調用bc打印的表達式。

內置機制顯示查詢中使用的所有規則大概是trace。有關詳細信息,請參閱您的Prolog手冊,這是一個相當複雜的論點,涉及系統的內部工作,以及您所針對語言的「架構」。

當然沒有輸出,除了你可以看到。這就是你寫的語義。

相關問題