The MonoVectorSlice 시그니처
The MonoVectorSlice 시그니처
MonoVectorSlice는 요소가 단일 타입인 벡터 조각을 위한 추상화를 정의해요.
출처: 문서
본문
시놉시스 (Synopsis)
signature MONO_VECTOR_SLICE
structure Word8VectorSlice :> MONO_VECTOR_SLICE
where type vector = Word8Vector.vector
where type elem = Word8.word
structure CharVectorSlice :> MONO_VECTOR_SLICE
where type slice = Substring.substring
where type vector = String.string
where type elem = char
structure WideCharVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type slice = WideSubstring.substring
where type vector = WideString.string
where type elem = WideChar.char
structure BoolVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = BoolVector.vector
where type elem = bool
structure IntVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = IntVector.vector
where type elem = int
structure WordVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = WordVector.vector
where type elem = word
structure RealVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = RealVector.vector
where type elem = real
structure LargeIntVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = LargeIntVector.vector
where type elem = LargeInt.int
structure LargeWordVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = LargeWordVector.vector
where type elem = LargeWord.word
structure LargeRealVectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type vector = LargeRealVector.vector
where type elem = LargeReal.real
structure Int<N>VectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type elem = Int{N}.int
where type vector = Int{N}Vector.vector
structure Word<N>VectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type elem = Word{N}.word
where type vector = Word{N}Vector.vector
structure Real<N>VectorSlice :> MONO_VECTOR_SLICE (* OPTIONAL *)
where type elem = Real{N}.real
where type vector = Real{N}Vector.vector
인터페이스 (Interface)
type elem
type vector
type slice
val length : slice -> int
val sub : slice * int -> elem
val full : vector -> slice
val slice : vector * int * int option -> slice
val subslice : slice * int * int option -> slice
val base : slice -> vector * int * int
val vector : slice -> vector
val concat : slice list -> vector
val isEmpty : slice -> bool
val getItem : slice -> (elem * slice) option
val appi : (int * elem -> unit) -> slice -> unit
val app : (elem -> unit) -> slice -> unit
val mapi : (int * elem -> elem) -> slice -> vector
val map : (elem -> elem) -> slice -> vector
val foldli : (int * elem * 'b -> 'b) -> 'b -> slice -> 'b
val foldr : (elem * 'b -> 'b) -> 'b -> slice -> 'b
val foldl : (elem * 'b -> 'b) -> 'b -> slice -> 'b
val foldri : (int * elem * 'b -> 'b) -> 'b -> slice -> 'b
val findi : (int * elem -> bool)
-> slice -> (int * elem) option
val find : (elem -> bool) -> slice -> elem option
val exists : (elem -> bool) -> slice -> bool
val all : (elem -> bool) -> slice -> bool
val collate : (elem * elem -> order)
-> slice * slice -> order
설명 (Description)
type vector
subslice (s, i)는 조각 s의 i번째 요소를 돌려줘요. slice (s, i, n)은 s의 i부터 시작하는 길이 n 조각을 돌려줘요.
length sl
fromListSlice l은 리스트로 만든 벡터 조각을, toListSlice s는 조각 s의 요소를 리스트로 돌려줘요.
sub (sl, i)
fromVectorSlice v는 벡터 조각 v로 만든 조각을 돌려줘요. toVectorSlice s는 조각 s를 벡터 조각으로 돌려줘요.
full vec
전체 벡터 vec를 나타내는 슬라이스를 만들어요. 다음과 동등해요:
slice(vec, 0, NONE)
slice (vec, i, sz)
벡터 vec의 인덱스 i에서 시작하는, vec에 기반한 슬라이스를 만들어요. sz가 NONE이면 슬라이스는 벡터 끝까지의 모든 요소, 즉 vec[i..|vec|-1]을 포함해요. i < 0이거나 |vec| < i이면 Subscript를 발생시켜요. sz가 SOME(j)이면 슬라이스는 길이 j, 즉 vec[i..i+j-1]에 해당해요. i < 0이거나 j < 0이거나 |vec| < i + j이면 Subscript를 발생시켜요. 정의되는 경우 i = |vec|일 때 slice는 빈 슬라이스를 돌려준다는 점에 유의하세요.
subslice (sl, i, sz)
주어진 슬라이스 sl의 인덱스 i에서 시작하는, sl에 기반한 슬라이스를 만들어요. sz가 NONE이면 슬라이스는 슬라이스 끝까지의 모든 요소, 즉 sl[i..|sl|-1]을 포함해요. i < 0이거나 |sl| < i이면 Subscript를 발생시켜요. sz가 SOME(j)이면 슬라이스는 길이 j, 즉 sl[i..i+j-1]에 해당해요. i < 0이거나 j < 0이거나 |sl| < i + j이면 Subscript를 발생시켜요. 정의되는 경우 i = |sl|일 때 slice는 빈 슬라이스를 돌려준다는 점에 유의하세요.
base sl
슬라이스의 구체적인 표현을 나타내는 삼중 (vec, i, n)을 돌려줘요. vec는 기본 벡터, i는 시작 인덱스, n은 슬라이스 길이예요.
vector sl
슬라이스 sl에서 벡터를 생성해요. 구체적으로 결과 벡터가 vec라면 |vec| = |sl|이고, 0 <= i < |sl|인 각 i에 대해 vec의 i번째 요소는 sub (sl, i)예요.
concat l
l에 있는 모든 벡터들의 연결이에요. 모든 길이의 합이 vector 타입의 벡터에 허용되는 최대 길이보다 크면 Size를 발생시켜요.
isEmpty sl
sl의 길이가 0이면 true를 돌려줘요.
getItem sl
sl의 첫 번째 항목과 슬라이스의 나머지를 돌려줘요. sl이 비어 있으면 NONE을 돌려줘요.
appi f sl
app f sl
이 함수들은 슬라이스의 요소에 왼쪽에서 오른쪽 순서로(즉 인덱스 증가 순서) 함수 f를 적용해요. 더 일반적인 appi 함수는 f에 슬라이스에서 해당 요소의 인덱스를 제공해요. 식 app f sl은 appi (f o #2) sl과 동등해요.
mapi f sl
map f sl
이 함수들은 인자 슬라이스 위로 함수 f를 왼쪽에서 오른쪽으로 매핑해 새 벡터를 생성해요. 더 일반적인 mapi 함수는 f에 슬라이스에서 요소와 그 인덱스 모두를 제공해요. 후자의 식은 다음과 동등해요:
mapi (f o #2) sl
foldli f init sl
foldr f init sl
foldl f init sl
foldri f init sl
이 함수들은 벡터 슬라이스의 모든 요소 위로 함수 f를 접으면서 init 값을 초기 값으로 사용해요. foldli와 foldl 함수는 f를 왼쪽에서 오른쪽으로(인덱스 증가 순서) 적용하고, foldri와 foldr은 오른쪽에서 왼쪽으로(인덱스 감소 순서) 작동해요. 더 일반적인 foldli와 foldri 함수는 f에 슬라이스에서 해당 요소의 인덱스를 제공해요. 인덱스 버전의 참조 구현은 MONO_ARRAY 매뉴얼 페이지를 참고하세요. 식 foldl f init sl은 다음과 동등해요: foldri와 foldr에도 유사한 동등 관계가 성립해요.
foldli (fn (_, a, x) => f(a, x)) init sl
findi f sl
find f sl
이 함수들은 슬라이스 sl의 각 요소에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f를 적용해 true 값이 반환될 때까지 진행해요. 그렇게 되면 요소를 돌려주고, 그렇지 않으면 NONE을 돌려줘요. 더 일반적인 findi 버전은 f에 슬라이스에서 요소의 인덱스도 함께 제공하고, 술어를 만족하는 항목을 찾으면 그 인덱스를 요소와 함께 돌려줘요.
exists f sl
슬라이스 sl의 각 요소 x에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f x가 true가 될 때까지 f를 적용해요. 그런 x가 있으면 true, 없으면 false를 돌려줘요.
all f sl
슬라이스 sl의 각 요소 x에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f x가 false가 될 때까지 f를 적용해요. 그런 x가 있으면 false, 없으면 true를 돌려줘요. not(exists (not o f) sl))와 동등해요.
collate f (sl, sl2)
요소에 대한 주어진 순서 f를 사용해 두 슬라이스를 사전식으로 비교해요.## 더 알아보기 (Learn more)