最初の引数がノードのリスト(つまり[a、b、c])である2位述語buildTreeを定義したい第2引数はツリーツリー(a、tree(b、nil、nil)、tree(c、nil、nil))です。これは、述語 "木" である:最初の引数がノードのリストで、2番目の引数がツリーである述語buildTree
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))
を持っていません。どうして?
'buildTree([c]、R)'を呼び出す必要があり、1要素リストのルールがないので失敗します。もう1つの問題は、両方の再帰呼び出しに 'H 'を渡していることです。つまり、両方のサブツリーで同じ要素になります。それがそのまま、あなたの問題は少し不十分です。 @ user1304831の解は '[a、b、c]'に必要な出力を与えますが、長いリストに対しては非常にアンバランスなツリーを生成します。たとえば、 '[a、b、c、d、e、f]'の例を挙げることができますか? –