수색…


비고

  • Haskell은 기본적으로 하나의 컴포넌트를 가진 튜플을 지원하지 않는다.

  • 단위 (written () )는 컴포넌트가없는 튜플로 이해할 수 있습니다.

  • 두 개 이상의 구성 요소가있는 튜플의 구성 요소를 추출하는 사전 정의 된 함수는 없습니다. 이러한 함수가 필요하다고 생각되면 튜플 유형 대신 레코드 레이블이있는 사용자 정의 데이터 유형을 사용하는 것이 좋습니다. 그런 다음 레코드 레이블을 함수로 사용하여 구성 요소를 추출 할 수 있습니다.

튜플 값을 만듭니다.

괄호와 쉼표를 사용하여 튜플을 만듭니다. 하나의 쉼표를 사용하여 쌍을 만듭니다.

(1, 2)

쉼표를 많이 사용하면 더 많은 구성 요소가있는 튜플을 만들 수 있습니다.

(1, 2, 3)

(1, 2, 3, 4)

unsugared 형식으로 튜플을 선언 할 수도 있습니다.

(,) 1 2     -- equivalent to (1,2)
(,,) 1 2 3  -- equivalent to (1,2,3)

튜플은 다른 유형의 값을 포함 할 수 있습니다.

("answer", 42, '?')

튜플은리스트 또는 더 많은 튜플과 같은 복잡한 값을 포함 할 수 있습니다.

([1, 2, 3], "hello", ('A', 65))

(1, (2, (3, 4), 5), 6)

튜플 유형 작성

튜플 유형을 작성하려면 괄호와 쉼표를 사용하십시오. 하나의 쉼표를 사용하여 쌍 유형을 작성하십시오.

(Int, Int)

쉼표를 많이 사용하면 더 많은 구성 요소로 튜플 유형을 작성할 수 있습니다.

(Int, Int, Int)

(Int, Int, Int, Int)

튜플은 다른 유형의 값을 포함 할 수 있습니다.

(String, Int, Char)

튜플은리스트 또는 더 많은 튜플과 같은 복잡한 값을 포함 할 수 있습니다.

([Int], String, (Char, Int))

(Int, (Int, (Int, Int), Int), Int)

튜플의 패턴 일치

튜플에서 패턴 매칭은 튜플 생성자를 사용합니다. 예를 들어 쌍을 일치 시키려면 (,) 생성자를 사용합니다.

myFunction1 (a, b) = ...

쉼표를 사용하여 튜플을 더 많은 구성 요소와 일치시킵니다.

myFunction2 (a, b, c) = ...

myFunction3 (a, b, c, d) = ...

튜플 패턴은 목록 패턴 또는 더 많은 튜플 패턴과 같은 복잡한 패턴을 포함 할 수 있습니다.

myFunction4 ([a, b, c], d, e) = ...

myFunction5 (a, (b, (c, d), e), f) = ...

튜플 컴포넌트 추출

Prelude 또는 Data.Tuplefstsnd 함수를 사용하여 쌍의 첫 번째 및 두 번째 구성 요소를 추출합니다.

fst (1, 2) -- evaluates to 1

snd (1, 2) -- evaluates to 2

또는 패턴 일치를 사용하십시오.

case (1, 2) of (result, _) => result -- evaluates to 1

case (1, 2) of (_, result) => result -- evaluates to 2

두 개 이상의 구성 요소가있는 튜플의 경우에도 패턴 일치가 작동합니다.

case (1, 2, 3) of (result, _, _) => result -- evaluates to 1

case (1, 2, 3) of (_, result, _) => result -- evaluates to 2

case (1, 2, 3) of (_, _, result) => result -- evaluates to 3

Haskell은 두 개 이상의 컴포넌트를 가진 튜플에 대해 fstsnd 와 같은 표준 함수를 제공하지 않는다. Hackage의 tuple 라이브러리는 Data.Tuple.Select 모듈에서 이러한 함수를 제공합니다.

튜플에 바이너리 함수를 적용합니다 (uncurrying).

uncurry 함수 ( Prelude 또는 Data.Tuple )를 사용하여 이진 함수를 튜플에있는 함수로 변환하십시오.

uncurry (+) (1, 2) -- computes 3

uncurry map (negate, [1, 2, 3]) -- computes [-1, -2, -3]

uncurry uncurry ((+), (1, 2)) -- computes 3

map (uncurry (+)) [(1, 2), (3, 4), (5, 6)] -- computes [3, 7, 11]

uncurry (curry f) -- computes the same as f

튜플 함수를 두 개의 인자에 적용 (currying)

튜플을 취하는 함수를 두 개의 인수를 취하는 함수로 변환하려면 Prelude 또는 Data.Tuplecurry 함수를 사용하십시오.

curry fst 1 2 -- computes 1

curry snd 1 2 -- computes 2

curry (uncurry f) -- computes the same as f

import Data.Tuple (swap)
curry swap 1 2 -- computes (2, 1)

스왑 쌍 구성 요소

한 쌍의 구성 요소를 교환하려면 swap ( Data.Tuple )을 사용하십시오.

import Data.Tuple (swap)
swap (1, 2) -- evaluates to (2, 1)

또는 패턴 일치를 사용하십시오.

case (1, 2) of (x, y) => (y, x) -- evaluates to (2, 1)

튜플 매칭의 엄격 성

패턴 (p1, p2) 은 가장 바깥 쪽 튜플 생성자에서 엄격 하기 때문에 예기치 않은 엄격 성 동작이 발생할 수 있습니다. 예를 들어, 다음 표현식은 ( Data.Function.fix 사용하여) 발산합니다.

fix $ \(x, y) -> (1, 2)

튜플 생성자에서 (x, y) 의 일치가 엄격하기 때문입니다. 그러나 반박 할 수없는 패턴을 사용하는 다음 표현식은 예상대로 (1, 2) 로 평가됩니다.

fix $ \ ~(x, y) -> (1, 2)


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow