ARRAY — 시스템 클래스(배열)

ARRAY — 시스템 클래스(배열)

같은 성격의 데이터를 여러 개 격자처럼 나란히 늘어놓고, 위치 번호로 원소를 꺼내 쓰고 싶을 때 배열을 써요. 리스프의 array는 일직선뿐 아니라 여러 차원을 가질 수 있는 구조예요. 이 문서는 시스템 클래스(system class) 문서예요.

출처: CLHS System Class ARRAY

본문

클래스 우선순위 리스트 (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-specrank이면 그 차원 수를 가진 배열만 포함돼요. dimension-spec이 차원들의 리스트이면, 그 차원 수(dimensions의 길이)와 표시된 차원을 가진 배열만 포함돼요. 이 경우 *는 대응하는 차원의 어떤 값이든 매칭해요. dimension-spec이 심볼 *이면 차원 수나 차원 기준으로 제한하지 않아요.

더 알아보기 (See Also)

  • *print-array*
  • aref
  • make-array
  • vector
  • 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)가 '문자를 담을 수 있는 모든 배열'의 집합이 아니라 '정확히 문자만, 그 외의 객체는 담을 수 없도록 특화된 배열'의 집합이기 때문이에요.