Sdílet prostřednictvím


Operace StartCountingOperation

Plně kvalifikovaný název: Std.Diagnostics.StartCountingOperation

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

Shrnutí

Začne spočítat, kolikrát se daná operace volá. Selže, pokud se operace už počítá.

Popis

Tato operace umožňuje spočítat, kolikrát se daná operace volá. Pokud se daná operace už počítá, volání StartCountingOperation znovu aktivuje selhání modulu runtime. Počítání vychází z konkrétní specializace vyvolané operace, takže X a Adjoint X se počítají samostatně. Stejně tak Controlled X, CNOTa CX jsou nezávislé operace, které se počítají samostatně, stejně jako Controlled X a Controlled Adjoint X.

Vstup

vypověditelný

Operace, která se má spočítat.

Poznámky

Počítání volání operací vyžaduje zvláštní péči o to, jaká operace se předává jako vstup. Například StartCountingOperation(H) spočítá jenom počet, kolikrát se H volá, zatímco StartCountingOperation(Adjoint H) bude počítat pouze počet, kolikrát se Adjoint H volá, i když H je samostatné. Důvodem je způsob, jakým provádění zpracovává vyvolání těchto operací jako odlišné podle jejich specializace. Stejným způsobem bude StartCountingOperation(Controlled X) počítat pouze počet, kolikrát se volá Controlled X, zatímco StartCountingOperation(CNOT) bude počítat pouze počet, kolikrát se volá CNOT.

Při počítání lambda se symbol, ke které je lambda vázán, používá k identifikaci operace a počítá se jako samostatná operace. Například

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

Bude počítat konkrétně volání myOp a nikoli H. Naproti tomu následující kód spočítá volání H sám:

let myOp = H;
StartCountingOperation(myOp);

Důvodem je to, že tento kód nedefinuje lambda a místo toho vytvoří vazbu na H přímo.