你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Functor 是允许你访问可调用对象的特定专用化实现的工厂。
Q# 目前支持两个 functor;Adjoint
和 Controlled
,这两者都可以应用于提供必要专用化的作。
Controlled
和 Adjoint
函数通勤;如果 ApplyUnitary
是同时支持这两个函数的作,则 Controlled Adjoint ApplyUnitary
和 Adjoint Controlled ApplyUnitary
之间没有区别。
两者都具有相同的类型,并在调用时执行为 controlled adjoint
专用化定义的实现。
相邻 functor
如果作 ApplyUnitary
定义了量子态的一元转换 U,Adjoint ApplyUnitary
访问 U†的实现。
Adjoint
functor 是其自身的逆函数,因为 (U†) † = 按定义 U。 例如,Adjoint Adjoint ApplyUnitary
与 ApplyUnitary
相同。
表达式 Adjoint ApplyUnitary
是与 ApplyUnitary
相同的类型的作;它具有相同的参数和返回类型,并支持相同的 functor。 与任何作一样,可以使用适合类型的参数调用它。 以下表达式将 ApplyUnitary
的 相邻专用化 应用于参数 arg
:
Adjoint ApplyUnitary(arg)
受控 functor
对于定义量子状态的一元转换 U 的作 ApplyUnitary
,Controlled ApplyUnitary
访问对处于 |1⟩ 状态的控制量子比特数组中的所有量子比特应用 U 条件的实现。
表达式 Controlled ApplyUnitary
是一个具有相同返回类型的作,作特征 为 ApplyUnitary
,这意味着它支持相同的函数。
它采用类型为 (Qubit[], <TIn>)
的参数,其中应将 <TIn>
替换为 ApplyUnitary
的参数类型,将 单一实例元组等效性 考虑在内。
操作 | 参数类型 | 受控参数类型 |
---|---|---|
X | Qubit |
(Qubit[], Qubit) |
交换 | (Qubit, Qubit) |
(Qubit[], (Qubit, Qubit)) |
具体地说,如果 cs
包含量子比特数组,q1
和 q2
是两个量子比特,并且 SWAP
的作 此处定义,则以下表达式将交换 q1
状态,如果 cs
中的所有量子比特都处于 |1⟩状态,则以下表达式将交换 q1
状态和 q2
:
Controlled SWAP(cs, (q1, q2))
注释
根据处于 |1⟩ 状态之外的控件量子比特有条件地应用作,可以通过在调用前将适当的相邻转换应用到控件量子比特,并在之后应用反函数来实现。 例如,通过应用前后的 X
作,可以对处于 |0⟩状态的所有控制量子比特进行转换。 这可以使用 串联方便地表示。 尽管如此,此类构造的详细程度将来可能值得对更紧凑语法的额外支持。