`LIST` — 리스트 시스템 클래스
LIST — 리스트 시스템 클래스
커먼 리스프를 처음 시작하면 가장 먼저 만나는 자료구조가 바로 리스트(list)예요. 그런데 이 리스트에는 정상 리스트(proper list) 만 있는 게 아니에요. 점 리스트, 원형 리스트까지 포함해서 리스트라는 타입이 정확히 뭘 뜻하는지 짚고 넘어가야 나중에 헷갈리지 않아요.
본문
클래스 우선순위 리스트 (Class Precedence List)
list, sequence, t
설명
리스트는 cons의 사슬(chain)이에요. 각 cons의 car는 그 리스트의 한 요소이고, 각 cons의 cdr은 사슬의 다음 연결 고리이거나 사슬을 끝내는 원자(terminating atom)예요.
여기서 끝맺음 방식에 따라 리스트가 세 종류로 갈라져요.
- 정상 리스트(proper list):
cdr의 끝이 빈 리스트()인 리스트예요.()자체도 정상 리스트죠. - 점 리스트(dotted list):
cdr의 끝이 빈 리스트가 아닌 다른 원자인 리스트예요. - 원형 리스트(circular list): 사슬 안의 어떤 cons의
cdr이 그보다 뒤에 오는 cons를 가리켜서 끝이 없는 리스트예요.
점 리스트와 원형 리스트도 엄연히 리스트에요. 다만 이 스펙에서 꾸밈없이 "list"라고 부를 때는 보통 정상 리스트를 뜻해요. 그렇지만 list 타입 자체는 분명하게 점 리스트와 원형 리스트까지 포함해요.
리스트의 각 요소마다 cons가 하나씩 존재해요. 빈 리스트는 요소가 없으니까 cons도 아니에요.
그리고 한 가지 재미있는 성질이 있는데, cons 타입과 null 타입은 list 타입을 빠짐없이 갈라 나누는(exhaustive partition) 관계예요. 다시 말해 어떤 객체든 리스트라면 cons이거나 nil 중 하나라는 거죠.
함께 보기
- Section 2.4.1 (Left-Parenthesis)
- Section 22.1.3.5 (Printing Lists and Conses)