Functor는 호출 가능한 특정 특수화 구현에 액세스할 수 있는 팩터리입니다.
Q# 현재 두 개의 functor를 지원합니다. Adjoint 및 Controlled모두 필요한 특수화를 제공하는 작업에 적용할 수 있습니다.
Controlled 및 Adjoint 펀터는 통근; ApplyUnitary 두 functor를 모두 지원하는 작업인 경우 Controlled Adjoint ApplyUnitaryAdjoint Controlled ApplyUnitary간에 차이가 없습니다.
둘 다 동일한 형식을 가지며 호출 시 controlled adjoint특수화대해 정의된 구현을 실행합니다.
인접한 펀터
연산 ApplyUnitary 양자 상태의 U 단위 변환을 정의하는 경우 Adjoint ApplyUnitaryU†구현에 액세스합니다.
(U†)† = 정의별 U 때문에 Adjoint 펀터는 자체적으로 역방향입니다. 예를 들어 Adjoint Adjoint ApplyUnitaryApplyUnitary같습니다.
식 Adjoint ApplyUnitaryApplyUnitary;와 동일한 형식의 연산입니다. 인수 및 반환 형식이 동일하며 동일한 functor를 지원합니다. 다른 작업과 마찬가지로 적절한 형식의 인수를 사용하여 호출할 수 있습니다. 다음 식은 ApplyUnitary인접 특수화 인수 arg적용합니다.
Adjoint ApplyUnitary(arg)
제어된 펀터
양자 상태의 U 단위 변환을 정의하는 작업 ApplyUnitary 경우 Controlled ApplyUnitary |1⟩ 상태인 컨트롤 큐비트 배열의 모든 큐비트에 U 조건부로 적용되는 구현에 액세스합니다.
Controlled ApplyUnitary 식은 ApplyUnitary반환 형식 및 작업 특성이 동일한 연산입니다. 즉, 동일한 functor를 지원합니다.
<TIn>
싱글톤 튜플 동등성을 고려하여 ApplyUnitary인수 형식으로 바꿔야 하는 (Qubit[], <TIn>)형식의 인수를 사용합니다.
| 수술 | 인수 형식 | 제어된 인수 형식 |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| 교환 | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
구체적으로 cs 큐비트 배열을 포함하는 경우 q1 및 q2 두 개의 큐비트이고 작업 SWAP 여기에 정의된 다음 식은 q1 상태를 교환하고 cs 모든 큐비트가 |1⟩ 상태인 경우 q2.
Controlled SWAP(cs, (q1, q2))
메모
호출하기 전에 적절한 인접 변환을 컨트롤 큐비트에 적용하고 그 후에 역을 적용하여 |1⟩ 상태가 아닌 상태에 있는 컨트롤 큐비트에 따라 작업을 조건부로 적용할 수 있습니다. 예를 들어 |0⟩ 상태에 있는 모든 컨트롤 큐비트의 변환을 컨디셔닝하려면 X 연산을 전후에 적용하여 수행할 수 있습니다. 이는 조정사용하여 편리하게 표현할 수 있습니다. 그럼에도 불구 하 고, 이러한 구문의 자세한 내용은 미래에 더 컴팩트 한 구문에 대 한 추가 지원을 받을 수 있습니다.