你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

仿函数应用

仿函数是允许访问可调用对象的特定专用化实现的工厂。 Q# 目前支持两个仿函数(AdjointControlled),两者均可应用于提供必要专用化的运算。

ControlledAdjoint 仿函数可交换;如果 ApplyUnitary 是同时支持这两个仿函数的运算,则 Controlled Adjoint ApplyUnitaryAdjoint Controlled ApplyUnitary 之间没有任何区别。 两者具有相同的类型,并在调用时执行为controlled adjoint专用化定义的实现。

Adjoint 仿函数

如果运算 ApplyUnitary 定义了量子态的幺正变换 U,则 Adjoint ApplyUnitary 会访问 U† 的实现。 Adjoint 仿函数是它自己的逆,因为根据定义,(U†)† = U。 例如,Adjoint Adjoint ApplyUnitaryApplyUnitary 相同。

表达式 Adjoint ApplyUnitary 是与 ApplyUnitary 相同类型的运算;它具有相同的参数和返回类型,并支持相同的仿函数。 与任何运算一样,可以使用合适类型的参数来调用它。 下面的表达式将 ApplyUnitaryadjoint 专用化应用于参数 arg

Adjoint ApplyUnitary(arg) 

Controlled 仿函数

对于定义量子态的幺正变换 U 的运算 ApplyUnitaryControlled ApplyUnitary 访问的实现针对处于 |1⟩ 状态的控制量子比特数组中的所有量子比特应用 U 条件

表达式 Controlled ApplyUnitary 是与 ApplyUnitary 具有相同返回类型和运算特征的运算,这意味着它支持相同的仿函数。 它需要 (Qubit[], <TIn>) 类型的参数,其中 <TIn> 应该替换为 ApplyUnitary 的参数类型,同时考虑到单一实例元组等价性

操作 参数类型 受控参数类型
X Qubit (Qubit[], Qubit)
SWAP (Qubit, Qubit) (Qubit[], (Qubit, Qubit))

具体而言,如果 cs 包含量子比特数组,q1q2 是两个量子比特,并且运算 SWAP 是在此处定义的,则在 cs 中的所有量子比特都处于 |1⟩ 状态的情况下,下面的表达式将交换 q1q2 的状态:

Controlled SWAP(cs, (q1, q2))

注意

根据处于 |1⟩ 状态之外的控件量子比特有条件地应用操作,可以通过在调用前将适当的相邻转换应用到控件量子比特,并在之后应用反函数来实现。 例如,针对所有处于 |0⟩ 状态的控制量子比特调节转换可以通过在之前和之后应用 X 运算来实现。 这可以使用 conjugation 来轻松表示。 尽管如此,这种构造十分详细,未来也许能够为更紧凑的语法提供额外支持。