StartCountingOperation 操作

完全限定的名称:Std.Diagnostics.StartCountingOperation

operation StartCountingOperation<'In, 'Out>(callable : ('In => 'Out)) : Unit

总结

开始计算调用给定操作的次数。 如果操作已计数,则失败。

描述

此操作允许对调用给定操作的次数进行计数。 如果已对给定操作进行计数,则再次调用 StartCountingOperation 将触发运行时失败。 计数基于调用的操作的特定专用化,因此单独对 XAdjoint X 进行计数。 同样,Controlled XCNOTCX 是单独计数的独立操作,如 Controlled XControlled Adjoint X

输入

调用

要计数的操作。

言论

对操作调用进行计数需要具体处理作为输入传递的操作。 例如,StartCountingOperation(H) 将仅计算调用 H 的次数,而 StartCountingOperation(Adjoint H) 将仅计算调用 Adjoint H 的次数,即使 H 是自我相邻的。 这是因为执行将这些操作的调用视为不同的专用化。 同样,StartCountingOperation(Controlled X) 将仅计算调用 Controlled X 的次数,而 StartCountingOperation(CNOT) 将仅计算调用 CNOT 的次数。

对 lambda 进行计数时,lambda 绑定到的符号用于标识操作,并将其计为单独的操作。 例如

let myOp = q => H(q);
StartCountingOperation(myOp);

将专门统计对 myOp 的调用,而不是 H。 相比之下,以下代码将计算对 H 本身的调用:

let myOp = H;
StartCountingOperation(myOp);

这是因为此代码不定义 lambda,而是直接创建一个绑定来 H