我想定义一个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))
。为什么呢?
答案 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这样的逻辑)。