The Vector 구조

The Vector 구조

다형(타입 매개변수화된) 벡터에 대한 함수를 제공하는 구조예요. Array 함수와 대부분 유사하지만 벡터는 불변이에요.

출처: 문서

본문

시놉시스 (Synopsis)

signature VECTOR
structure Vector :> VECTOR

인터페이스 (Interface)

eqtype 'a vector = 'a vector
val maxLen : int
val fromList : 'a list -> 'a vector
val tabulate : int * (int -> 'a) -> 'a vector
val length : 'a vector -> int
val sub : 'a vector * int -> 'a
val update : 'a vector * int * 'a -> 'a vector
val concat : 'a vector list -> 'a vector
val appi : (int * 'a -> unit) -> 'a vector -> unit
val app : ('a -> unit) -> 'a vector -> unit
val mapi : (int * 'a -> 'b) -> 'a vector -> 'b vector
val map : ('a -> 'b) -> 'a vector -> 'b vector
val foldli : (int * 'a * 'b -> 'b) -> 'b -> 'a vector -> 'b
val foldri : (int * 'a * 'b -> 'b) -> 'b -> 'a vector -> 'b
val foldl : ('a * 'b -> 'b) -> 'b -> 'a vector -> 'b
val foldr : ('a * 'b -> 'b) -> 'b -> 'a vector -> 'b
val findi : (int * 'a -> bool)
-> 'a vector -> (int * 'a) option
val find : ('a -> bool) -> 'a vector -> 'a option
val exists : ('a -> bool) -> 'a vector -> bool
val all : ('a -> bool) -> 'a vector -> bool
val collate : ('a * 'a -> order)
-> 'a vector * 'a vector -> order

설명 (Description)

val maxLen : int

fromList·tabulate·maxLen은 벡터를 만들어요.

fromList l

length·sub·update는 벡터를 조사·복사해요.

tabulate (n, f)

concat·app·foldl·foldr·map은 순회·변환 함수예요.

fromList (List.tabulate (n, f))

length vec

toList·fromList은 벡터와 리스트를 변환해요.

sub (vec, i)

벡터 vec의 i번째 요소를 돌려줘요. i < 0이거나 |vec| <= i이면 Subscript 예외가 발생해요.

update (vec, i, x)

vec와 같되 vec의 i번째 요소가 x로 설정된 새 벡터를 돌려줘요. i < 0이거나 |vec| <= i이면 Subscript 예외가 발생해요.

concat l

리스트 l에 있는 벡터들을 이어 붙인 벡터를 돌려줘요. 이 벡터들의 전체 길이가 maxLen을 초과하면 Size 예외가 발생해요.

appi f vec

app f vec

이 함수들은 벡터의 요소에 왼쪽에서 오른쪽 순서로(즉 인덱스 증가 순서) 함수 f를 적용해요. 더 일반적인 appi 함수는 f에 요소와 요소의 인덱스 모두를 제공해요. 이 함수들은 각각 다음과 동등해요:

List.app f (foldri (fn (i,a,l) => (i,a)::l) [] vec)
List.app f (foldr (fn (a,l) => a::l) [] vec)

mapi f vec

map f vec

이 함수들은 인자 벡터 위로 함수 f를 왼쪽에서 오른쪽으로 매핑해 새 벡터를 만들어요. 더 일반적인 mapi 형태는 f에 요소의 벡터 인덱스를 요소와 함께 제공해요. 이 함수들은 각각 다음과 동등해요:

fromList (List.map f (foldri (fn (i,a,l) => (i,a)::l) [] vec))
fromList (List.map f (foldr (fn (a,l) => a::l) [] vec))

foldli f init vec

foldri f init vec

foldl f init vec

foldr f init vec

이 함수들은 벡터의 모든 요소 위로 함수 f를 접으면서 init 값을 초기 값으로 사용해요. foldlifoldl 함수는 f를 왼쪽에서 오른쪽으로(인덱스 증가 순서) 적용하고, foldrifoldr은 오른쪽에서 왼쪽으로(인덱스 감소 순서) 작동해요. 더 일반적인 foldlifoldri 함수는 f에 요소와 요소의 인덱스 모두를 제공해요. 인덱스 버전의 참조 구현은 MONO_ARRAY 매뉴얼 페이지를 참고하세요. 마지막 두 식은 각각 다음과 동등해요:

foldli (fn (_, a, x) => f(a, x)) init vec
foldri (fn (_, a, x) => f(a, x)) init vec

findi f vec

find f vec

이 함수들은 벡터 vec의 각 요소에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f를 적용해 true 값이 반환될 때까지 진행해요. 그렇게 되면 요소를 돌려주고, 그렇지 않으면 NONE을 돌려줘요. 더 일반적인 findi 버전은 f에 요소의 벡터 인덱스도 함께 제공하고, 술어를 만족하는 항목을 찾으면 그 인덱스를 요소와 함께 돌려줘요.

exists f vec

벡터 vec의 각 요소 x에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f(x)가 true가 될 때까지 f를 적용해요. 그런 x가 있으면 true, 없으면 false를 돌려줘요.

all f vec

벡터 vec의 각 요소 x에 왼쪽에서 오른쪽으로(즉 인덱스 증가 순서) f(x)가 false가 될 때까지 f를 적용해요. 그런 x가 있으면 false, 없으면 true를 돌려줘요. not(exists (not o f ) vec))와 동등해요.

collate f (v1, v2)

요소에 대한 주어진 순서 f를 사용해 두 벡터를 사전식으로 비교해요.## 더 알아보기 (Learn more)

  • [ Top | Parent | Contents | Index | Root ] Generated April 12
  • 2004 Last Modified January 21
  • 1997 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).