谓词buildTree,其第一个参数是节点列表,第二个参数是树

时间:2012-04-01 22:19:05

标签: prolog

我想定义一个2位谓词buildTree,其第一个参数是节点列表(即[a,b,c]),其第二个参数是树树(a,树(b,nil) ,无),树(C,零,无))即可。这是谓词“树”:

tree(nil). 
tree(tree(_,L,R)):-tree(L),tree(R).

这是谓词“buildTree”:

buildTree([],nil).
buildTree([X|[Y|H]],tree(X,L,R)):-
   buildTree([Y|H],L),
   buildTree(H,R).

但是对于查询,即buildTree([a,b,c],T),我没有复杂的术语tree(a,tree(b,nil,nil),tree(c,nil,nil))。为什么呢?

1 个答案:

答案 0 :(得分:0)

你还没有正确定义buildTree,首先,你没有为一个输入定义它,也没有定义两个,所以从逻辑上讲,你的答案最终会不正确。

它应该更符合这一点:

/* Stopping conditions */
buildTree([X | nil], tree(X, nil, nil)). /* First trivial case */
buildTree([X | [Y | nil]], tree(X, tree(Y, nil, nil), nil)). /* Second case */

/* builds a tree, according to your reasoning */
buildTree([X | [Y | H]], tree(X, L, R)) :- buildTree(Y, L), buildTree(H, R).

当然,这不是二叉搜索树(为此,您必须定义一些像treeInsert这样的逻辑)。