The VectorSlice 구조
The VectorSlice 구조
벡터 조각(부분 벡터)에 대한 함수를 제공하는 구조예요.
출처: 문서
본문
시놉시스 (Synopsis)
signature VECTOR_SLICE
structure VectorSlice :> VECTOR_SLICE
인터페이스 (Interface)
type 'a slice
val length : 'a slice -> int
val sub : 'a slice * int -> 'a
val full : 'a Vector.vector -> 'a slice
val slice : 'a Vector.vector * int * int option -> 'a slice
val subslice : 'a slice * int * int option -> 'a slice
val base : 'a slice -> 'a Vector.vector * int * int
val vector : 'a slice -> 'a Vector.vector
val concat : 'a slice list -> 'a Vector.vector
val isEmpty : 'a slice -> bool
val getItem : 'a slice -> ('a * 'a slice) option
val appi : (int * 'a -> unit) -> 'a slice -> unit
val app : ('a -> unit) -> 'a slice -> unit
val mapi : (int * 'a -> 'b) -> 'a slice -> 'b Vector.vector
val map : ('a -> 'b) -> 'a slice -> 'b Vector.vector
val foldli : (int * 'a * 'b -> 'b) -> 'b -> 'a slice -> 'b
val foldri : (int * 'a * 'b -> 'b) -> 'b -> 'a slice -> 'b
val foldl : ('a * 'b -> 'b) -> 'b -> 'a slice -> 'b
val foldr : ('a * 'b -> 'b) -> 'b -> 'a slice -> 'b
val findi : (int * 'a -> bool)
-> 'a slice -> (int * 'a) option
val find : ('a -> bool) -> 'a slice -> 'a option
val exists : ('a -> bool) -> 'a slice -> bool
val all : ('a -> bool) -> 'a slice -> bool
val collate : ('a * 'a -> order)
-> 'a slice * 'a slice -> order
설명 (Description)
length sl
slice·full·subslice은 조각을 만들어요.
sub (sl, i)
length·sub·update는 조각을 조사해요.
full vec
vector·toList·fromList은 조각을 변환해요.
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에서 벡터를 생성해요. 구체적으로 결과는 다음과 동등해요:
Vector.tabulate (length sl, fn i => sub (sl, i))
concat l
l에 있는 모든 슬라이스들의 연결이에요. 모든 길이의 합이 Vector.maxLen보다 크면 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에 슬라이스에서 요소와 그 인덱스 모두를 제공해요. 첫 번째 식은 다음과 동등해요: 후자의 식은 다음과 동등해요:
let
fun ff (i,a,l) = f(i,a)::l
in
Vector.fromList (rev (foldli ff [] sl))
end
mapi (f o #2) sl
foldli f init sl
foldri f init sl
foldl f init sl
foldr 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)
- [ Top | Parent | Contents | Index | Root ] Generated April 12
- 2004 Last Modified June 20
- 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).