序言需要计算树的大小
prolog need to compute the tree size
我需要使用以下方法获取树的大小:size(Tree,Size)
目前我的理解有误,请指教!
size(empty, Size).
size(tree(L, _, R), Size) :-
size(L, Left_Size),
size(R, Right_Size),
Size is
Left_Size + Right_Size + 1.
输出应产生:
?- size(node(1,2),X).
X = 2.
?- size(node(1,[2,3,4]),X).
X = 2.
?- size(node(node(a,b),[2,3,4]),X).
X = 3.
Prolog 是一种声明性语言,您必须正确陈述您的模式:
size(node(L,R), Size) :- ... % why you add 1 to left+right sizes ?
从示例中,我建议在看到任何非节点时停止使用 Size = 1 的递归:
size(node(L,R), Size) :- !, ...
size(_, 1).
size_tree(无,0)。 % nil 模拟空节点
size_tree(节点(根,左,右),大小):-
Root\= nil,
RootSize = 1,
size_tree(Left, LeftSide),
size_tree(Right, RightSide),
Size is (RootSize + LeftSide + RightSide).
我需要使用以下方法获取树的大小:size(Tree,Size)
目前我的理解有误,请指教!
size(empty, Size).
size(tree(L, _, R), Size) :-
size(L, Left_Size),
size(R, Right_Size),
Size is
Left_Size + Right_Size + 1.
输出应产生:
?- size(node(1,2),X).
X = 2.
?- size(node(1,[2,3,4]),X).
X = 2.
?- size(node(node(a,b),[2,3,4]),X).
X = 3.
Prolog 是一种声明性语言,您必须正确陈述您的模式:
size(node(L,R), Size) :- ... % why you add 1 to left+right sizes ?
从示例中,我建议在看到任何非节点时停止使用 Size = 1 的递归:
size(node(L,R), Size) :- !, ...
size(_, 1).
size_tree(无,0)。 % nil 模拟空节点
size_tree(节点(根,左,右),大小):-
Root\= nil,
RootSize = 1,
size_tree(Left, LeftSide),
size_tree(Right, RightSide),
Size is (RootSize + LeftSide + RightSide).