Prolog 插入(I,[],[I,[],[])。如何在二叉树中插入值?
要向堆中添加新元素,我们必须:Prolog 插入(I,[],[I,[],[])。如何在二叉树中插入值?,prolog,clpfd,Prolog,Clpfd,要向堆中添加新元素,我们必须: 创建包含此元素值的节点 在尽可能靠左的第一个空位置的最后一层系上这个结(如有必要,创建一个新层)。我们总是得到一个完整的二叉树,但不一定是堆 我写了这段代码: 插入(I,[],[I,[],[])。 插入(I,[[ug,D],N):- 深度(G,P1),深度(D,P2),P1P2,插入(I,D,N)。 深度([],0)。 深度(Y,Z,H):- 深度(Y,H1),深度(Z,H2),最大值(H1,H2,H3),H为1+H3。 但当执行此查询时,它将失败: ?-插入(
插入(I,[],[I,[],[])。
插入(I,[[ug,D],N):-
深度(G,P1),深度(D,P2),P1P2,插入(I,D,N)。
深度([],0)。
深度(Y,Z,H):-
深度(Y,H1),深度(Z,H2),最大值(H1,H2,H3),H为1+H3。
但当执行此查询时,它将失败:
?-插入(2、[19、[18、[12、[]、[]、[15、[]、[]]、[17、[10、[]、[]、[]、[16、[]、[]、N)。
错。
为什么?((您没有在程序中定义max/3
,我猜是这样的))
max(A,B,M):-
M是最大值(A,B)。
为什么?
首先,总是从小的例子开始。就像一棵只有一个元素的树。这也是失败的:
?-插入(2、[12、[]、[]、N)。
错。
那为什么呢?如果一个(纯单调的)程序失败了,那么我们需要对它进行推广。让我们这样试一下:
:- op(950, fy, *).
*(_).
insert(I, [], [I, [], [] ] ).
insert(I, [_, G, D], N):-
depth(G, P1),
depth(D, P2),
P1<P2,
* 如果我在AT,考虑使用<代码>库(CLPZ)或其略显过时的前任“代码>库(CPLFD)代替<代码>(>)/2代码/代码>等,因为这不会给您带来太多的错误。
有关Prolog特有的更多调试方法,请参阅。如果您对某个答案感到满意,请单击upvote按钮下方您最喜欢的答案左侧的灰色复选标记接受该答案。 insert(I, [], [I, [], [] ] ). insert(I, [_, G, D], N):- depth(G, P1), depth(D, P2), *