튜플(F#)
튜플은 명명되지 않았지만 순서가 지정된 값의 그룹입니다. 튜플에 포함된 값의 형식은 서로 다를 수 있습니다.
( element , ... , element )
설명
위 구문에서 각 element는 임의의 식이 될 수 있습니다.
예제
튜플의 예로는 형식이 같거나 서로 다른 요소 두 개의 쌍, 요소 세 개의 쌍 등이 있습니다.다음 코드에서는 몇 가지 예를 보여 줍니다.
// Tuple of two integers.
( 1, 2 )
// Triple of strings.
( "one", "two", "three" )
// Tuple of unknown types.
( a, b )
// Tuple that has mixed types.
( "one", 1, 2.0 )
// Tuple of integer expressions.
( a + 1, b + 1)
개별 값 구하기
다음 코드에서와 같이 패턴 일치를 사용하여 튜플 요소에 액세스하고 이름을 할당할 수 있습니다.
let print tuple1 =
match tuple1 with
| (a, b) -> printfn "Pair %A %A" a b
다음과 같이 let 바인딩에 튜플 패턴을 사용할 수 있습니다.
let (a, b) = (1, 2)
이렇게 하면 값 a와 b가 동시에 바인딩됩니다.튜플의 요소 중 하나만 필요한 경우에는 필요 없는 변수에 대해 새 이름을 만들지 않도록 와일드카드 문자(밑줄)를 사용할 수 있습니다.
let (a, _) = (1, 2)
함수 fst와 snd는 각각 튜플의 첫째 요소와 둘째 요소를 반환합니다.
let c = fst (1, 2)
let d = snd (1, 2)
튜플의 셋째 요소를 반환하는 기본 제공 함수는 없지만 다음과 같이 이 기능을 수행하는 함수를 쉽게 작성할 수 있습니다.
let third (_, _, c) = c
일반적으로 개별 튜플 요소에 액세스하는 데는 패턴 일치를 사용하는 것이 더 좋습니다.
튜플 사용
튜플을 사용하면 다음 예제에서와 같이 함수 하나로부터 여러 개의 값을 손쉽게 반환할 수 있습니다.정수 나눗셈을 계산하는 이 예제에서는 나눗셈의 몫을 반올림하여 튜플 쌍의 첫째 멤버로 반환하고 나머지를 튜플 쌍의 둘째 멤버로 반환합니다.
let divRem a b =
let x = a / b
let y = a % b
(x, y)
일반적인 함수 구문에 암시되어 있는 함수 인수를 암시적으로 변환하고 싶지 않은 경우 튜플을 함수 인수로 사용할 수도 있습니다.
let sumNoCurry (a, b) = a + b
다음 코드에서와 같이 함수 let sum a b = a + b를 정의하는 일반적인 구문을 사용하여 함수에 부분 적용되는 첫째 인수로 함수를 정의할 수 있습니다.
let addTen = sum 10
let result = addTen 95
// Result is 105.
튜플을 매개 변수로 사용하면 변환이 비활성화됩니다.자세한 내용은 함수(F#)의 "인수 부분 적용"을 참조하십시오.
튜플 형식의 이름
튜플인 형식의 이름을 작성하면서 요소를 구분하는 데는 * 기호를 사용합니다.(10, 10.0, "ten")의 예에서와 같이 int, float 및 string으로 이루어진 튜플의 형식은 다음과 같이 작성됩니다.
int * float * string
컴파일된 튜플 형식
튜플을 F#에서만 사용하고 다른 언어에는 노출하지 않는 경우 버전 4 이전의 .NET Framework 버전을 대상으로 하지 않으면 이 단원의 내용에 신경을 쓰지 않아도 됩니다.
튜플은 여러 가지 제네릭 형식 중 하나인 개체로 컴파일됩니다. 해당 이름은 모두 Tuple이며 인자, 즉 형식 매개 변수의 수에 대해 오버로드됩니다.C# 또는 Visual Basic 등과 같은 다른 언어에서 튜플을 보거나 F# 구문을 인식하지 못하는 도구를 사용하는 경우 튜플 형식이 이와 같은 형태로 표시됩니다.Tuple 형식은 .NET Framework 4에서 도입되었습니다.그 이전 버전의 .NET Framework를 대상으로 하는 경우 컴파일러에서는 F# 핵심 라이브러리 2.0 버전에 포함된 System.Tuple 버전을 사용합니다.이 라이브러리의 형식은 2.0, 3.0 및 3.5 버전의 .NET Framework를 대상으로 하는 응용 프로그램에만 사용됩니다..NET Framework 2.0 및 .NET Framework 4 F# 구성 요소 사이의 이진 호환성을 위해 형식 전달이 사용됩니다.