The Array 구조
The Array 구조
Array 구조는 다형(polymorphic) 배열인데, 상수 시간 접근과 갱신이 가능한 가변 순차 구조예요. 배열에는 특별한 동등성 성질이 있어요. 두 배열이 같으려면 같은 배열이어야 해요. 즉 array, fromList 같은 원시 배열 생성자를 같은 호출로 만들었을 때만 같고, 그 외에는 같지 않아요. 길이 0인 배열에도 똑같이 적용돼요. 그래서 타입 ty array는 ty가 동등 타입이 아니어도 동등성을 허용해요.
출처: 문서
본문
시놉시스 (Synopsis)
signature ARRAY
structure Array :> ARRAY
인터페이스 (Interface)
eqtype 'a array = 'a array
type 'a vector = 'a Vector.vector
val maxLen : int
val array : int * 'a -> 'a array
val fromList : 'a list -> 'a array
val tabulate : int * (int -> 'a) -> 'a array
val length : 'a array -> int
val sub : 'a array * int -> 'a
val update : 'a array * int * 'a -> unit
val vector : 'a array -> 'a vector
val copy : {src : 'a array, dst : 'a array, di : int}
-> unit
val copyVec : {src : 'a vector, dst : 'a array, di : int}
-> unit
val appi : (int * 'a -> unit) -> 'a array -> unit
val app : ('a -> unit) -> 'a array -> unit
val modifyi : (int * 'a -> 'a) -> 'a array -> unit
val modify : ('a -> 'a) -> 'a array -> unit
val foldli : (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
val foldri : (int * 'a * 'b -> 'b) -> 'b -> 'a array -> 'b
val foldl : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b
val foldr : ('a * 'b -> 'b) -> 'b -> 'a array -> 'b
val findi : (int * 'a -> bool)
-> 'a array -> (int * 'a) option
val find : ('a -> bool) -> 'a array -> 'a option
val exists : ('a -> bool) -> 'a array -> bool
val all : ('a -> bool) -> 'a array -> bool
val collate : ('a * 'a -> order)
-> 'a array * 'a array -> order
설명 (Description)
val maxLen : int
이 구현이 지원하는 배열의 최대 길이예요. 더 큰 배열을 만들려고 하면 Size 예외가 발생해요.
array (n, init)
길이 n인 새 배열을 만들어요. 각 요소는 값 init으로 초기화돼요. n < 0이거나 maxLen < n이면 Size 예외가 발생해요.
fromList l
리스트 l에서 새 배열을 만들어요. 배열의 길이는 length l이고, 배열의 i번째 요소는 리스트의 i번째 요소예요. 리스트 길이가 maxLen보다 크면 Size 예외가 발생해요.
tabulate (n, f)
요소가 f를 그 요소의 인덱스에 적용해서 증가하는 인덱스 순서로 정의되는, n개 요소의 배열을 만들어요. 다음 식과 동등해요. n < 0이거나 maxLen < n이면 Size 예외가 발생해요.
fromList (List.tabulate (n, f))
length arr
배열 arr의 길이인 |arr|를 돌려줘요.
sub (arr, i)
배열 arr의 i번째 요소를 돌려줘요. i < 0이거나 |arr| <= i이면 Subscript 예외가 발생해요.
update (arr, i, x)
배열 arr의 i번째 요소를 x로 설정해요. i < 0이거나 |arr| <= i이면 Subscript 예외가 발생해요.
vector arr
배열 arr에서 벡터를 만들어요. 구체적으로 결과는 다음 식과 동등해요.
Vector.tabulate (length arr, fn i => sub (arr, i))
copy {src, dst, di}
이 함수들은 배열이나 벡터 src 전체를 배열 dst로 복사해요. src의 0 <= i < |src|인 i번째 요소를 목적지 배열의 di + i 위치로 복사해요. di < 0이거나 |dst| < di + |src|이면 Subscript 예외가 발생해요. 구현 참고: copy에서 dst와 src가 같으면 예외를 피하려면 di = 0이어야 하고, 그 경우 copy는 항등이 돼요.
copyVec {src, dst, di}
이 함수들은 증가하는 인덱스 순서로 배열 arr의 요소에 함수 f를 적용해요. 더 일반적인 형태인 appi는 f에 해당 요소의 배열 인덱스까지 제공해요.
appi f arr
이 함수들은 증가하는 인덱스 순서로 배열 arr의 요소에 함수 f를 적용하고, 각 요소를 그 결과로 교체해요. 더 일반적인 modifyi는 f에 해당 요소의 배열 인덱스를 제공해요. 식 modify f arr는 modifyi (f o #2) arr와 동등해요.
app f arr
이 함수들은 init을 초기 값으로 사용해 배열 arr의 모든 요소 위로 함수 f를 접어요. foldli와 foldl은 f를 왼쪽에서 오른쪽(인덱스 증가)으로 적용하고, foldri와 foldr은 오른쪽에서 왼쪽(인덱스 감소)으로 적용해요. 더 일반적인 foldli와 foldri는 f에 해당 요소의 배열 인덱스를 제공해요. 인덱스 버전의 참조 구현은 MONO_ARRAY 매뉴얼 페이지를 보세요. 식 foldl f init arr는 다음 식과 동등해요. foldri와 foldr에도 유사한 동등 관계가 성립해요.
modifyi f arr
이 함수들은 배열 arr의 각 요소에 왼쪽에서 오른쪽(즉 인덱스 증가 방향)으로 f를 적용해서 참 값이 반환될 때까지 가요. 그렇게 되면 요소를 돌려주고, 아니면 NONE을 돌려줘요. 더 일반적인 버전인 findi는 요소의 배열 인덱스도 f에 제공하고, 조건자를 만족하는 항목을 찾으면 그 인덱스와 요소를 함께 돌려줘요.
modify f arr
배열 arr의 각 요소 x에 왼쪽에서 오른쪽(즉 인덱스 증가 방향)으로 f를 적용해서 f x가 참으로 평가될 때까지 가요. 그런 x가 있으면 true를, 없으면 false를 돌려줘요.
foldli f init arr
배열 arr의 각 요소 x에 왼쪽에서 오른쪽(즉 인덱스 증가 방향)으로 f를 적용해서 f x가 거짓으로 평가될 때까지 가요. 그런 x가 있으면 false를, 없으면 true를 돌려줘요. not(exists (not o f) arr))와 동등해요.
foldri f init arr
주어진 순서 f로 두 배열을 사전(lexicographic) 비교해요.
foldl f init arr
foldr f init arr
이 함수들은 배열 arr의 모든 요소 위로 함수 f를 접으면서 init 값을 초기 값으로 사용해요. foldli와 foldl 함수는 함수 f를 왼쪽에서 오른쪽으로(인덱스 증가 순서) 적용하고, foldri와 foldr은 오른쪽에서 왼쪽으로(인덱스 감소 순서) 작동해요. 더 일반적인 foldli와 foldri 함수는 f에 해당 요소의 배열 인덱스를 함께 제공해요. 인덱스 버전의 참조 구현은 MONO_ARRAY 매뉴얼 페이지를 참고하세요. 식 foldl f init arr는 다음과 동등해요: foldri와 foldr에도 유사한 동등 관계가 성립해요.
foldli (fn (_, a, x) => f(a, x)) init arr
findi f arr
find f arr
이 함수들은 배열 arr의 각 요소에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f를 적용해 true 값이 반환될 때까지 진행해요. 그렇게 되면 요소를 돌려주고, 그렇지 않으면 NONE을 돌려줘요. 더 일반적인 findi 버전은 f에 요소의 배열 인덱스도 함께 제공하고, 술어를 만족하는 항목을 찾으면 그 인덱스를 요소와 함께 돌려줘요.
exists f arr
배열 arr의 각 요소 x에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f x가 true가 될 때까지 f를 적용해요. 그런 x가 있으면 true, 없으면 false를 돌려줘요.
all f arr
배열 arr의 각 요소 x에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f x가 false가 될 때까지 f를 적용해요. 그런 x가 있으면 false, 없으면 true를 돌려줘요. not(exists (not o f) arr))와 동등해요.
collate f (a1, a2)
요소에 대한 주어진 순서 f를 사용해 두 배열을 사전식으로 비교해요.## 더 알아보기 (Learn more)
- [ Top | Parent | Contents | Index | Root ] Generated April 12
- 2004 Last Modified May 26
- 2000 Comments to John Reppy. This document may be distributed freely over the internet as long as the copyright notice and license terms below are prominently displayed within every machine-readable copy. Copyright © 2004 AT&T and Lucent Technologies. All rights reserved. Permission is granted for internet users to make one paper copy for their own personal use. Further hardcopy reproduction is strictly prohibited. Permission to distribute the HTML document electronically on any medium other than the internet must be requested from the copyright holders by contacting the editors. Printed versions of the SML Basis Manual are available from Cambridge University Press. To order
- please visit www.cup.org (North America) or www.cup.cam.ac.uk (outside North America).