Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Functory jsou továrny, které umožňují přístup ke konkrétním implementaci specializace volatelné.
Q# aktuálně podporuje dva funktory; Adjoint a Controlled, z nichž oba mohou být použity na operace, které poskytují nezbytné specializace.
Controlled a Adjoint ztlumení; pokud ApplyUnitary je operace, která podporuje oba funktory, neexistuje žádný rozdíl mezi Controlled Adjoint ApplyUnitary a Adjoint Controlled ApplyUnitary.
Oba mají stejný typ a po vyvolání spusťte implementaci definovanou pro controlled adjointspecializace.
Adjoint functor
Pokud operace ApplyUnitary definuje jednotkovou transformaci U kvantového stavu, Adjoint ApplyUnitary přistupuje k implementaci U†.
Adjoint functor je vlastní inverzní, protože (U†)† = U podle definice. Například Adjoint Adjoint ApplyUnitary je stejná jako ApplyUnitary.
Výraz Adjoint ApplyUnitary je operace stejného typu jako ApplyUnitary; má stejný argument a návratový typ a podporuje stejné funktory. Stejně jako jakoukoli operaci lze vyvolat pomocí argumentu vhodného typu. Následující výraz použije adjoint specializaciApplyUnitary na argument arg:
Adjoint ApplyUnitary(arg)
Řízený functor
Pro operaci ApplyUnitary, která definuje jednotkovou transformaci U kvantového stavu, Controlled ApplyUnitary přistupuje k implementaci, která použije U podmíněný na všech qubitech v poli řídicích qubitů, které jsou ve stavu |1⟩.
Výraz Controlled ApplyUnitary je operace se stejným návratovým typem a charakteristiky operace jako ApplyUnitary, což znamená, že podporuje stejné funktory.
Bere v úvahu argument typu (Qubit[], <TIn>), kde <TIn> by měl být nahrazen typem argumentu ApplyUnitary, přičemž ekvivalence řazené kolekce členů s jednímtonem.
| Operace | Typ argumentu | Typ řízeného argumentu |
|---|---|---|
| X | Qubit |
(Qubit[], Qubit) |
| VYMĚNIT | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
Konkrétně platí, že pokud cs obsahuje pole qubitů, q1 a q2 jsou dva qubity a operace SWAP je definovaná tady, pak následující výraz vymění stav q1 a q2, pokud jsou všechny qubity v cs ve stavu |1⟩:
Controlled SWAP(cs, (q1, q2))
Poznámka:
Podmíněné použití operace na základě řídicích qubitů, které jsou ve stavu jiném než |1⟩, lze dosáhnout použitím odpovídající adjointable transformace na řídicí qubity před vyvoláním a použitím inverzních inverzních funkcí po. Transformaci všech řídicích qubitů, které jsou ve stavu |0⟩, lze například dosáhnout použitím operace X před a po. To lze pohodlně vyjádřit pomocí konjugace. Podrobnosti takového konstruktoru však mohou v budoucnu zasáhnou další podporu kompaktnější syntaxe.