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