Common Lisp 및 함수 프로그래밍을 처음 접했지만 C, C++, C#, Java 등의 언어로 많은 경험이 있습니다. 목록에서 가장 중첩 된 목록을 찾는 데 문제가 있습니다.Common Lisp의 목록에서 가장 중첩 된 목록 찾기
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
내가이 경우에 내가 어떻게 든 목록을 평평 수있는 생각을했다
(7)
입니다이 목록 내에서 가장 하위 목록을 좀하고 싶습니다 : 내 입력이 같은 것입니다 , 하나의 하위 목록 만 남을 때까지. 무슨 뜻인지 설명하기 위해, 여기에 몇 가지 단계 :
1 단계 - 입력 :
(0 1 (2 3) 4 (5 (6 (7) 8)) 9)
2 단계 - "첫 번째 수준"에 평평 :
(0 1 2 3 4 5 (6 (7) 8) 9)
3 단계. - "두 번째 수준"에 평탄화 됨 :
(0 1 2 3 4 5 6 (7) 8 9)
이제 가장 중첩 된 목록 인 중첩 목록이 하나만 남았습니다. 그러나 두 개 이상의 목록이 나타날 때 문제가 발생합니다. 이 점에 대해 의견을 나누십시오.
나는이 절차를 Common Lisp에서 현실적으로 다루는 데 어려움을 겪고있다. 그래서 나는 올바른 방향으로 어떤 포인터에 대해 감사하고, 몇 가지 예제 코드 등을 고맙게 생각한다. 이것은 숙제 임으로 풀 솔루션을 기대하지는 않지만 누군가가 아마도 더 쉽고 우수한 솔루션과 그 구현을 지적한다면 기쁜 일입니다.
:
두 번째 생각 후,이 약간 청소기 솔루션입니다 재미있는 문제의 종류.DFS 통과가 될 것이라고 생각하고 목록에 쌍 (잎, 잎 깊이)을 기록한 다음 스택에서 최대 깊이의 잎을 검색합니다. –