ARRAY — 시스템 클래스(배열)
ARRAY — 시스템 클래스(배열)
같은 성격의 데이터를 여러 개 격자처럼 나란히 늘어놓고, 위치 번호로 원소를 꺼내 쓰고 싶을 때 배열을 써요. 리스프의 array는 일직선뿐 아니라 여러 차원을 가질 수 있는 구조예요. 이 문서는 시스템 클래스(system class) 문서예요.
본문
클래스 우선순위 리스트 (Class Precedence List)
array
t
설명 (Description)
배열(array)은 데카르트 좌표계에 따라 배열된 객체들을 담아요. 배열은 fixnum들의 집합 {i0, i1, ..., i(r-1)}을 배열의 대응하는 원소들로 매핑해 주는데, 여기서 0 <= ij < dj이고 r은 배열의 차원 수(rank), dj는 배열의 차원(dimension) j의 크기예요.
배열이 만들어질 때, 그것을 생성하는 프로그램은 모든 원소가 특정 타입이라고 선언할 수 있어요. 이를 **표현된 배열 요소 타입(expressed array element type)**이라고 불러요. 구현은 실제 **배열 요소 타입(actual array element type)**을 만들기 위해 이 타입을 **업그레이드(upgrade)**할 수 있는데, 이것이 배열이 실제로 특화(specialized)되는 요소 타입이에요. upgraded-array-element-type 함수를 참고하세요.
복합 타입 지정자 종류 (Compound Type Specifier Kind)
특화(Specializing).
복합 타입 지정자 문법 (Compound Type Specifier Syntax)
array [{element-type | *} [dimension-spec]]
dimension-spec ::= rank | * | ({dimension | *}*)
복합 타입 지정자 인자 (Compound Type Specifier Arguments)
dimension— 유효한 배열 차원(valid array dimension)이에요.element-type— 타입 지정자예요.rank— 음이 아닌 fixnum이에요.
복합 타입 지정자 설명 (Compound Type Specifier Description)
이것은 요소 타입, 차원 수(rank), 그리고 차원들이 주어진 element-type, rank, dimensions와 일치하는 배열들의 집합을 나타내요. 구체적으로는 다음과 같아요.
element-type이 심볼 *이면 배열은 요소 타입 기준으로 제외되지 않아요. 그렇지 않으면 element-type을 업그레이드한 결과가 actual array element type인 배열들만 포함돼요. Section 15.1.2.1(Array Upgrading)을 참고하세요.
dimension-spec이 rank이면 그 차원 수를 가진 배열만 포함돼요. dimension-spec이 차원들의 리스트이면, 그 차원 수(dimensions의 길이)와 표시된 차원을 가진 배열만 포함돼요. 이 경우 *는 대응하는 차원의 어떤 값이든 매칭해요. dimension-spec이 심볼 *이면 차원 수나 차원 기준으로 제한하지 않아요.
더 알아보기 (See Also)
*print-array*arefmake-arrayvector- Section 2.4.8.12 (Sharpsign A)
- Section 22.1.3.8 (Printing Other Arrays)
참고 (Notes)
타입 (array t)는 타입 (array *)의 진짜 부분집합(proper subtype)이라는 점을 주의하세요. 그 이유는 (array t)가 '어떤 객체든 담을 수 있는' 배열들의 집합(원소 타입이 모든 객체를 포함하는 t)이기 때문이에요. 반면 (array *)는 '모든 배열'의 집합이라, 예를 들어 문자만 담을 수 있는 배열도 포함돼요. 그리고 (array character)는 (array t)의 부분집합이 아니에요. 두 집합은 서로소(disjoint)인데, (array character)가 '문자를 담을 수 있는 모든 배열'의 집합이 아니라 '정확히 문자만, 그 외의 객체는 담을 수 없도록 특화된 배열'의 집합이기 때문이에요.