2011-09-03 2 views
1

에 잎의 수를 계산 :프롤로그 - 나는 예를 들면 다음과 같습니다 나무가 있으면 나무

tree3(b(l(1),b(l(2),l(3)))). 

가 어떻게 잎의 수를 계산하는 프로그램을 작성합니다를? 나는 그것을 사용 때이 같은 것을보고 싶지 :

?- tree3(T), count_leaves(T, N). 

N = 3, 
T = b(l(1),b(l(2),l(3))) 

내가 어떤 도움을 싶어요!

+1

시도 : count_leaves (비어 있음, 0). count_leaves (트리 (L, _, R), TOTAL_SIZE) : - \t count_leaves (L, Left_Size), \t count_leaves (R, Right_Size), \t TOTAL_SIZE이 Left_Size입니다 + Right_Size + 1.하지만 그냥 날 수 있습니다 아니. – user940599

답변

4

이처럼 할 수있는 :

count_leaves(l(_), 1). 
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2. 

기본적으로, 단지 잎의 나무 한 잎이있다. 트리가 브랜치로 시작하면 두 브랜치 모두를 반복하여 결과를 추가하십시오.

empty과 일치하는 것이 없으므로 해결책은 no입니다. 그리고 그것을 고쳤더라도 잎은 세지 않고 안쪽 노드 만 세게됩니다.

+0

정말 고마워요! – user940599

+0

다른 도움을 주시겠습니까? 이제 나뭇잎의 정보를 목록에 넣는 프로그램을 작성하려고합니다. 나는 이것을 시도했다 : leaves (l (_), [_]). 잎 (b (B1, B2), [L]) : - \t 잎 (B1, [L1]), \t 잎 (B2, [L2]). append (L1, L2, L). 그러나 그것은 나에게 L = [_ A]를줍니다. 왜 그런가요? – user940599

+0

다른 질문을해야합니다. – svick

관련 문제