如何在Prolog中将树叶添加到树中
我正在学习Prolog中的二叉树,在向特定的b-树添加叶子时遇到了一些问题 我使用以下谓词将单个叶添加到b树:如何在Prolog中将树叶添加到树中,prolog,Prolog,我正在学习Prolog中的二叉树,在向特定的b-树添加叶子时遇到了一些问题 我使用以下谓词将单个叶添加到b树: addLeaf(nil, X, t(nil, X, nil)). addLeaf(t(Left, X, Right), X, t(Left, X, Right)). addLeaf(t(Left, Root, Right), X, t(Left1, Root, Right)) :- gt(Root, X), addLeaf(Left, X, Left1). addLea
addLeaf(nil, X, t(nil, X, nil)).
addLeaf(t(Left, X, Right), X, t(Left, X, Right)).
addLeaf(t(Left, Root, Right), X, t(Left1, Root, Right)) :-
gt(Root, X), addLeaf(Left, X, Left1).
addLeaf(t(Left, Root, Right), X, t(Left, Root, Right1)) :-
gt(X, Root), addLeaf(Right, X, Right1).
gt(Element1, Element2) :- Element1 @> Element2.
这很简单,我想我没有问题
我的问题是,如何使用它来执行一个查询,向bin树添加多个叶
例如,如果在Prolog shell中执行以下语句:
[debug] ?- addLeaf(nil, 6, Tree).
Tree = t(nil, 6, nil).
[debug] ?- addLeaf(Tree, 6, NewTree).
Tree = nil,
NewTree = t(nil, 6, nil)
原始树是nil(没有树),因此添加一个新叶相当于创建一个以元素6为根的新树(称为tree)
现在我的问题是:“我已经创建了一棵新树,它对应于tree变量,我该怎么做才能将其他叶子添加到此树中?”
因为,如果现在我尝试执行以下语句:
[debug] ?- addLeaf(nil, 6, Tree).
Tree = t(nil, 6, nil).
[debug] ?- addLeaf(Tree, 6, NewTree).
Tree = nil,
NewTree = t(nil, 6, nil)
我得到了Tree=nill(如果我在上一个语句中刚刚创建了它,也就是说,显然Tree变量(在两个语句中)是相互独立的,显然变量是相互独立的
因此,我尝试执行:
[debug] ?- addLeaf(nil, 6, Tree), addLeaf(Tree, 8, NewTree).
Tree = t(nil, 6, nil),
NewTree = t(nil, 6, t(nil, 8, nil)).
将8元素添加为6的右子元素(根据b树规则)效果良好
但是,我想问的是,在Prolog shell中,是否可以这样做:
create new tree.
add a leaf.
add another leaf.
add another leaf.
...
...
如果不在唯一语句中声明所有操作,您可以了解一些有关它的信息。您可以:
此示例使用顶级变量(SWI Prolog的一个功能).从NewTree2判断,您的代码似乎有一个输入错误。看看
assert
。您在addLeaf
的第3个子句的第3个参数中缺少了functort
。Tnx,我已经纠正了这个规则中的输入错误Tnx,现在已经很清楚了。我已经纠正了我发布的代码中的输入错误,也许有一天会有人可以使用此帖子:-)