prolog需要计算树的大小

prolog需要计算树的大小,prolog,size,nodes,Prolog,Size,Nodes,我需要使用: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).

我需要使用:
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).
树的大小(零,0)。%nil模拟一个空节点

大小_树(节点(根、左、右)、大小):-

有可能!也是可能的(具有类似的受限功能)。
 Root\= nil,
 RootSize = 1,
 size_tree(Left, LeftSide),
 size_tree(Right, RightSide),
 Size is (RootSize + LeftSide + RightSide).