2012-04-08 167 views
1

我想構建一個謂詞(Prolog),它需要一棵樹並返回一個列表列表,每個列表都是一個樹形路徑。該樹被定義爲 樹(Root,LeftTree,RightTree)。 您有什麼建議嗎?列表列表中的樹路徑

回答

4

這是相當不尋常的(這是比較常見的要求,例如對一棵樹和它的所有節點,其DCG中是一個不錯的選擇的平面列表之間的關係),也許是這樣的:

tree_list(nil, []). 
tree_list(tree(Node,Left,Right), [Lefts,Node,Rights]) :- 
     tree_list(Left, Lefts), 
     tree_list(Right, Rights). 

例子:

?- tree_list(tree(a,tree(b,nil,tree(d,nil,nil)),tree(c,nil,nil)), Ts). 
Ts = [[[], b, [[], d, []]], a, [[], c, []]]. 

這表示是浪費(你知道,所有的非空列表將有3個要素,那麼爲什麼不使用三元項而不是列表?),在我看來沒有必要(因爲你已經有了樹代表性),但是誰知道它有什麼用處。 ..