2017-10-06 56 views
0

所以我有這個prolog程序,打印出樹中正數的數量。轉換樹到列表

positive(void). 
positive(tree(L, Root, R), P) :- Root > 0, positive(L, X),positive(R, Y). 
positive(tree(L, Root, R), P) :- positive(L,X), positive(R,Y). 

而是在這棵樹輸出正數數,我想輸出是積極

+0

前綴,中綴,後綴順序?你有什麼嘗試? –

回答

0

我們可以構造轉變的積極因素,以列表的謂詞列表中的實際數字,但更優雅的方法是構造一個與樹中所有正數統一的謂詞。像:

positive(tree(_,X,_),X) :- 
    X > 0. 
positive(tree(L,_,_),X) :- 
    positive(L,X). 
positive(tree(_,_,R),X) :- 
    positive(R,X). 

這是前綴符號,我們使用X爲先的三個子句的統一。如果你想中綴,你可以交換第一個和第二個prediate。如果需要後綴,那麼我們可以交換第一個和第三個子句。

現在我們可以使用findall/3元謂:

positive_list(T,L) :- 
    findall(P,positive(T,P),L). 

構建這樣一個positive/2謂詞的優點是,我們還可以構建(部分接地)包含正數(與​​樹木實例),進一步研究一個部分接地樹,該樹應該包含一個正數(如T = tree(empty,3,_), positive(T,5).),並且還會查詢樹中是否有正數(使用positive(tree(void,3,void),2).)。