목록에있는 모든 숫자를 세 심하게 집계하는 프로그램이 필요합니다. 나는 그들이 다른 목록 안에 있지 않은 경우 숫자를 집계 할 수 있었지만 깊게 중첩 된 요소를 통해 반복하는 것은 효과가 없습니다. 나는 지금까지이 : 나는 count([a,1,[2,b],3],N)
를 호출한다면프롤로그는 목록의 숫자를 반복적으로 계산합니다.
count([],0).
count([H|Tail], N) :-
count(Tail, N1),
( number(H)
->N is N1 + 1
; is_list(H)
-> count(H,N)
; N = N1
).
따라서, 출력이 N=3
해야한다; 그러나 나는 N=2
만받습니다. 누군가 제 2 케이스 테스트에 도움을 주시겠습니까? 여기서 사용 가능한 모든 솔루션은 깊이 중첩 된 숫자 요소에 대해서는 작동하지 않습니다.
감사합니다.
방금로 시작하는 목록을 평평하게 할 수 없습니다, 그 다음의 숫자를 계산? – RoadRunner
아니요, 저는 flatten으로 솔루션을 시도했지만 중첩 된 하위 목록에 대해 재귀를 사용해야하기 때문에 "낙심"했습니다. –