복사 및 업데이트 식
변경 가능한 바인딩의 필요성을 줄이기 위해 Q#은 항목 액세스 권한이 있는 값 형식에 대한 복사 및 업데이트 식을 지원합니다. 사용자 정의 형식과 배열은 모두 변경할 수 없으며 이 범주에 속합니다. 사용자 정의 형식을 사용하면 이름을 통해 항목에 액세스할 수 있지만, 배열을 사용하면 인덱스 또는 인덱스 범위를 통해 항목에 액세스할 수 있습니다.
복사 및 업데이트 식은 식의 오른쪽에 정의된 항목으로 설정된 특정 지정된 항목을 제외하고 모든 항목이 원래 식의 해당 값으로 설정된 새 값을 인스턴스화합니다.
3개로 구성된 연산자 w/
<-
를 사용하여 구성됩니다. 구문 w/
은 "with"에 대해 일반적으로 사용되는 짧은 표기법으로 읽어야 합니다.
original w/ itemAccess <- modification
여기서 original
은 사용자 정의 형식의 식 또는 배열 식입니다. itemAccess
및 modification
에 해당하는 요구 사항은 사용자 정의 형식 복사 및 업데이트 및 배열 복사 및 업데이트를 참조하세요.
우선 순위 측면에서 복사 및 업데이트 연산자는 왼쪽 연관 연산자이고, 우선 순위가 가장 낮으며, 특히 범위 연산자(..
) 또는 삼항 조건부 연산자(?
|
)보다 우선 순위가 낮습니다.
선택한 왼쪽 연관성을 사용하면 복사 및 업데이트 식을 쉽게 연결할 수 있습니다.
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
는 원래 값과 다른 항목의 이름을 나타냅니다. 추가 제한 없이 항목 이름을 사용할 수 있는 기능이 이 컨텍스트로 제한되므로 이는 original
및 modification
와 같은 또 다른 식이 아닙니다. 즉, Q#에 있는 두 개의 컨텍스트 식 중 하나입니다.
modification
식의 형식은 분기되는 명명된 항목의 형식과 일치해야 합니다.
예를 들어, complex
에 Complex(0., 0.)
값이 포함되어 있고 여기서 Complex
형식은 여기에서 정의됩니다.
complex w/ Re <- 1.
Complex(1., 0.)
으로 평가되는 Complex
형식의 식입니다.
배열 복사 및 업데이트
배열의 경우 itemAccess
는 적절한 형식의 임의 식일 수 있습니다. 배열 조각화에 유효한 동일한 형식이 이 컨텍스트에서 유효합니다. 구체적으로 itemAccess
식은 Int
또는 Range
형식일 수 있습니다. itemAccess
가 Int
형식의 값이면 modification
형식은 배열의 항목 종류와 일치해야 합니다. itemAccess
가 Range
형식의 값이면 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
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기