Operación StartCountingOperation
Nombre completo: Std.Diagnostics.StartCountingOperation
operation StartCountingOperation<'In, 'Out>(callable : ('In => 'Out)) : Unit
Resumen
Comienza a contar el número de veces que se llama a la operación especificada. Se produce un error si la operación ya se está contando.
Descripción
Esta operación permite contar el número de veces que se llama a una operación determinada. Si la operación dada ya se está contando, llamar a StartCountingOperation
de nuevo desencadenará un error en tiempo de ejecución. El recuento se basa en la especialización específica de la operación invocada, por lo que X
y Adjoint X
se cuentan por separado.
Del mismo modo, Controlled X
, CNOT
y CX
son operaciones independientes que se cuentan por separado, tal como se Controlled X
y Controlled Adjoint X
.
Entrada
Accesible
Operación que se va a contar.
Observaciones
El recuento de llamadas de operación requiere atención específica en qué operación se pasa como entrada. Por ejemplo, StartCountingOperation(H)
contará solo el número de veces que se llama a H
, mientras que StartCountingOperation(Adjoint H)
contará solo el número de veces que se llama a Adjoint H
, aunque H
sea autocontigua. Esto se debe a cómo la ejecución trata la invocación de estas operaciones como distinta por su especialización.
De la misma manera, StartCountingOperation(Controlled X)
contará solo el número de veces que se llama a Controlled X
, mientras que StartCountingOperation(CNOT)
contará solo el número de veces que se llama a CNOT
.
Al contar lambdas, el símbolo al que se enlaza la expresión lambda se usa para identificar la operación y se cuenta como una operación independiente. Por ejemplo
let myOp = q => H(q);
StartCountingOperation(myOp);
Contará específicamente llamadas a myOp
y no a H
. Por el contrario, el código siguiente contará las llamadas a H
en sí:
let myOp = H;
StartCountingOperation(myOp);
Esto se debe a que este código no define una expresión lambda y, en su lugar, simplemente crea un enlace para H
directamente.