R6RS Scheme: 벡터
R6RS Scheme: 벡터
정수로 색인되는 이질적(heterogeneous) 구조인 벡터(vector)의 연산을 설명해요. 벡터 생성·접근·변경·변환·매핑 프로시저를 시그니처와 예시로 다뤄요.
출처: 문서
본문
벡터는 정수로 색인되는 이질적 구조예요. 벡터는 보통 같은 길이의 리스트보다 적은 공간을 차지하고, 무작위로 선택된 원소에 접근하는 평균 시간도 리스트보다 벡터에서 보통 더 짧아요.
벡터의 길이는 그것이 포함하는 원소의 개수예요. 이 숫자는 벡터가 만들어질 때 고정되는 음이 아닌 정수예요. 벡터의 유효한 색인(valid index)들은 벡터의 길이보다 작은 정확한 음이 아닌 정수 객체들이에요. 벡터의 첫 원소는 0으로 색인되고, 마지막 원소는 벡터의 길이보다 1 작은 값으로 색인돼요.
리스트 상수와 마찬가지로, 벡터 상수는 인용(quote)되어야 해요:
'#(0 (2 2 2 2) "Anna") ⇒ #(0 (2 2 2 2) "Anna")
(vector? obj) — procedure
obj가 벡터이면 #t를 반환해요. 그렇지 않으면 이 프로시저는 #f를 반환해요.
(make-vector k) — procedure
(make-vector k fill) — procedure
k개의 원소를 가진 새로 할당된 벡터를 반환해요. 두 번째 인자가 주어지면 각 원소가 fill로 초기화돼요. 그렇지 않으면 각 원소의 초기 내용은 미지정이에요.
(vector obj ...) — procedure
주어진 인자들을 원소로 포함하는 새로 할당된 벡터를 반환해요. list에 해당하는 벡터 버전이에요.
(vector 'a 'b 'c) ⇒ #(a b c)
(vector-length vector) — procedure
vector의 원소 개수를 정확한 정수 객체로 반환해요.
(vector-ref vector k) — procedure
k는 vector의 유효한 색인이어야 해요. vector-ref 프로시저는 vector의 원소 k의 내용을 반환해요.
(vector-ref '#(1 1 2 3 5 8 13 21) 5) ⇒ 8
(vector-set! vector k obj) — procedure
k는 vector의 유효한 색인이어야 해요. vector-set! 프로시저는 obj를 vector의 원소 k에 저장하고 미지정 값을 반환해요.
vector-set!에 불변 벡터를 전달하는 것은 조건 타입 &assertion을 가진 예외를 일으켜야 해요.
(let ((vec (vector 0 '(2 2 2 2) "Anna")))
(vector-set! vec 1 '("Sue" "Sue"))
vec)
⇒ #(0 ("Sue" "Sue") "Anna")
(vector-set! '#(0 1 2) 1 "doe")
⇒ unspecified
; constant vector
; should raise &assertion exception
(vector->list vector) — procedure
(list->vector list) — procedure
vector->list 프로시저는 vector의 원소들에 포함된 객체들의 새로 할당된 리스트를 반환해요. list->vector 프로시저는 리스트 list의 원소들로 초기화된 새로 만들어진 벡터를 반환해요.
(vector->list '#(dah dah didah)) ⇒ (dah dah didah)
(list->vector '(dididit dah)) ⇒ #(dididit dah)
(vector-fill! vector fill) — procedure
vector의 모든 원소에 fill을 저장하고 미지정 값을 반환해요.
(vector-map proc vector1 vector2 ...) — procedure
벡터들은 모두 같은 길이여야 해요. proc은 벡터들의 개수만큼의 인자를 받아들이고 단일 값을 반환해야 해요.
vector-map 프로시저는 proc을 벡터들의 원소들에 원소별로 적용하고 결과들을 순서대로 담은 벡터를 반환해요. proc은 항상 vector-map 자신과 같은 동적 환경에서 호출돼요. proc이 벡터들의 원소들에 적용되는 순서는 미지정이에요. vector-map에서 여러 반환 값이 발생하면, 앞선 반환 값들이 만들어낸 반환 값들은 변형되지 않아요.
map에 해당하는 벡터 버전이에요.
구현 책임: 구현은
proc에 대한 제약을, 설명된 대로 적용함으로써 수행되는 범위까지 확인해야 해요. 구현은proc을 적용하기 전에 그것이 적절한 인자인지 확인할 수 있어요.
(vector-for-each proc vector1 vector2 ...) — procedure
벡터들은 모두 같은 길이여야 해요. proc은 벡터들의 개수만큼의 인자를 받아들여야 해요. vector-for-each 프로시저는 proc을 벡터들의 원소들에 원소별로 적용해 그 부수 효과를 일으켜요. 적용 순서는 첫 원소부터 마지막 원소까지예요. proc은 항상 vector-for-each 자신과 같은 동적 환경에서 호출돼요. vector-for-each의 반환 값들은 미지정이에요.
for-each에 해당하는 벡터 버전이에요.
구현 책임: 구현은
proc에 대한 제약을, 설명된 대로 적용함으로써 수행되는 범위까지 확인해야 해요. 구현은proc을 적용하기 전에 그것이 적절한 인자인지 확인할 수 있어요.
더 알아보기 (Learn more)
출처: Vectors - R6RS