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

仿函数应用

Functor 是允许你访问可调用对象的特定专用化实现的工厂。 Q# 目前支持两个 functor;AdjointControlled,这两者都可以应用于提供必要专用化的作。

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

相邻 functor

如果作 ApplyUnitary 定义了量子态的一元转换 UAdjoint ApplyUnitary 访问 U†的实现。 Adjoint functor 是其自身的逆函数,因为 (U†) † = 按定义 U。 例如,Adjoint Adjoint ApplyUnitaryApplyUnitary相同。

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

Adjoint ApplyUnitary(arg) 

受控 functor

对于定义量子状态的一元转换 U 的作 ApplyUnitaryControlled ApplyUnitary 访问对处于 |1⟩ 状态的控制量子比特数组中的所有量子比特应用 U 条件的实现。

表达式 Controlled ApplyUnitary 是一个具有相同返回类型的作,作特征ApplyUnitary,这意味着它支持相同的函数。 它采用类型为 (Qubit[], <TIn>)的参数,其中应将 <TIn> 替换为 ApplyUnitary的参数类型,将 单一实例元组等效性 考虑在内。

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

具体地说,如果 cs 包含量子比特数组,q1q2 是两个量子比特,并且 SWAP 的作 此处定义,则以下表达式将交换 q1 状态,如果 cs 中的所有量子比特都处于 |1⟩状态,则以下表达式将交换 q1 状态和 q2

Controlled SWAP(cs, (q1, q2))

注释

根据处于 |1⟩ 状态之外的控件量子比特有条件地应用作,可以通过在调用前将适当的相邻转换应用到控件量子比特,并在之后应用反函数来实现。 例如,通过应用前后的 X作,可以对处于 |0⟩状态的所有控制量子比特进行转换。 这可以使用 串联方便地表示。 尽管如此,此类构造的详细程度将来可能值得对更紧凑语法的额外支持。