복사 및 업데이트 식

변경 가능한 바인딩의 필요성을 줄이기 위해 Q#은 항목 액세스 권한이 있는 값 형식에 대한 복사 및 업데이트 식을 지원합니다. 사용자 정의 형식과 배열은 모두 변경할 수 없으며 이 범주에 속합니다. 사용자 정의 형식을 사용하면 이름을 통해 항목에 액세스할 수 있지만, 배열을 사용하면 인덱스 또는 인덱스 범위를 통해 항목에 액세스할 수 있습니다.

복사 및 업데이트 식은 식의 오른쪽에 정의된 항목으로 설정된 특정 지정된 항목을 제외하고 모든 항목이 원래 식의 해당 값으로 설정된 새 값을 인스턴스화합니다. 3개로 구성된 연산자 w/<-를 사용하여 구성됩니다. 구문 w/은 "with"에 대해 일반적으로 사용되는 짧은 표기법으로 읽어야 합니다.

    original w/ itemAccess <- modification

여기서 original은 사용자 정의 형식의 식 또는 배열 식입니다. itemAccessmodification에 해당하는 요구 사항은 사용자 정의 형식 복사 및 업데이트배열 복사 및 업데이트를 참조하세요.

우선 순위 측면에서 복사 및 업데이트 연산자는 왼쪽 연관 연산자이고, 우선 순위가 가장 낮으며, 특히 범위 연산자(..) 또는 삼항 조건부 연산자(?|)보다 우선 순위가 낮습니다. 선택한 왼쪽 연관성을 사용하면 복사 및 업데이트 식을 쉽게 연결할 수 있습니다.

    let model = Default<SequentialModel>()
        w/ Structure <- ClassifierStructure()
        w/ Parameters <- parameters
        w/ Bias <- bias;

관련된 가장 왼쪽 식과 동일한 형식의 식을 구성하는 연산자와 마찬가지로 해당 평가 및 재할당 문을 사용할 수 있습니다. 예를 들어 아래의 두 명령문에서 첫 번째 문은 arr 변경 가능한 변수를 선언하고 이를 정수 배열의 기본값에 바인딩합니다. 그런 다음, 두 번째 문은 첫 번째 항목(인덱스 0)이 10으로 설정된 새 배열을 빌드하고 이를 arr에 재할당합니다.

    mutable arr = [0, size = 3]; // arr contains [0, 0, 0]
    set arr w/= 0 <- 10;      // arr contains [10, 0, 0] 

두 번째 문은 더 자세한 set arr = arr w/ 0 <- 10; 구문의 축약형일 뿐입니다.

사용자 정의 형식 복사 및 업데이트

original 값이 사용자 정의 형식이면 itemAccess는 원래 값과 다른 항목의 이름을 나타냅니다. 추가 제한 없이 항목 이름을 사용할 수 있는 기능이 이 컨텍스트로 제한되므로 이는 originalmodification와 같은 또 다른 식이 아닙니다. 즉, Q#에 있는 두 개의 컨텍스트 식 중 하나입니다.

modification 식의 형식은 분기되는 명명된 항목의 형식과 일치해야 합니다. 예를 들어, complexComplex(0., 0.) 값이 포함되어 있고 여기서 Complex 형식은 여기에서 정의됩니다.

complex w/ Re <- 1. 

Complex(1., 0.)으로 평가되는 Complex 형식의 식입니다.

배열 복사 및 업데이트

배열의 경우 itemAccess는 적절한 형식의 임의 식일 수 있습니다. 배열 조각화에 유효한 동일한 형식이 이 컨텍스트에서 유효합니다. 구체적으로 itemAccess 식은 Int 또는 Range 형식일 수 있습니다. itemAccessInt 형식의 값이면 modification 형식은 배열의 항목 종류와 일치해야 합니다. itemAccessRange 형식의 값이면 modification 형식은 배열 형식과 동일해야 합니다.

예를 들어, arr에 배열 [0, 1, 2, 3]이 포함되어 있으면

  • arr w/ 0 <- 10[10, 1, 2, 3] 배열입니다.
  • arr w/ 2 <- 10[0, 1, 10, 3] 배열입니다.
  • arr w/ 0..2..3 <- [10, 12][10, 1, 12, 3] 배열입니다.

복사 및 업데이트 식을 사용하면 기존 배열을 기반으로 하여 새 배열을 효율적으로 만들 수 있습니다. 복사 및 업데이트 식 구현은 원하는 동작을 달성하는 데 필요한 부분만 복제하여 전체 배열 복사를 방지하고 가능한 경우 내부 수정을 수행합니다. 따라서 배열 초기화는 불변성으로 인해 추가 오버헤드를 발생시키지 않습니다.

Microsoft.Quantum.Arrays 네임스페이스는 배열 만들기 및 조작을 위한 편리한 도구를 제공합니다.

복사 및 업데이트 식은 새 배열을 즉시 생성하는 편리한 방법입니다. 예를 들어 다음 식은 PauliZ로 설정된 i 인덱스의 항목을 제외하고 모든 항목이 PauliI로 설정된 배열로 평가합니다.

[PauliI, size = n] w/ i <- PauliZ