에 잎의 수를 계산 :프롤로그 - 나는 예를 들면 다음과 같습니다 나무가 있으면 나무
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)))
내가 어떤 도움을 싶어요!
에 잎의 수를 계산 :프롤로그 - 나는 예를 들면 다음과 같습니다 나무가 있으면 나무
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)))
내가 어떤 도움을 싶어요!
이처럼 할 수있는 :
는count_leaves(l(_), 1).
count_leaves(b(B1, B2), N) :- count_leaves(B1, N1), count_leaves(B2, N2), N is N1 + N2.
기본적으로, 단지 잎의 나무 한 잎이있다. 트리가 브랜치로 시작하면 두 브랜치 모두를 반복하여 결과를 추가하십시오.
empty
과 일치하는 것이 없으므로 해결책은 no
입니다. 그리고 그것을 고쳤더라도 잎은 세지 않고 안쪽 노드 만 세게됩니다.
정말 고마워요! – user940599
다른 도움을 주시겠습니까? 이제 나뭇잎의 정보를 목록에 넣는 프로그램을 작성하려고합니다. 나는 이것을 시도했다 : leaves (l (_), [_]). 잎 (b (B1, B2), [L]) : - \t 잎 (B1, [L1]), \t 잎 (B2, [L2]). append (L1, L2, L). 그러나 그것은 나에게 L = [_ A]를줍니다. 왜 그런가요? – user940599
다른 질문을해야합니다. – svick
시도 : 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