Vervoegingen
Vervoegingen zijn gebruikelijk in kwantumberekeningen. In wiskundige termen zijn het patronen van de vorm U†VU voor twee eenheidstransformaties U en V. Dit patroon is relevant vanwege de specifieke kenmerken van het kwantumgeheugen: berekeningen bouwen kwantumcorrelaties op, of verstrengeling, om gebruik te maken van de unieke activa van het kwantum. Dit betekent echter ook dat zodra een subroutine zijn qubits niet meer nodig heeft, deze qubits niet eenvoudig opnieuw kunnen worden ingesteld en vrijgegeven, omdat het observeren van hun status van invloed zou zijn op de rest van het systeem. Daarom moet het effect van een eerdere berekening meestal worden omgekeerd voordat het kwantumgeheugen wordt vrijgegeven en opnieuw wordt gebruikt.
Q# heeft daarom een speciale constructie voor het uitdrukken van berekeningen waarvoor een dergelijke opschoning is vereist. De expressies bestaan uit twee codeblokken, één met de implementatie van U en één met de implementatie van V. Het ongedaan maken van decomputatie (de toepassing van U†) wordt automatisch uitgevoerd als onderdeel van de expressie.
De expressie heeft de vorm
within {
<statements>
}
apply {
<statements>
}
waarbij <statements>
wordt vervangen door een willekeurig aantal instructies waarin respectievelijk de implementatie van U en V wordt gedefinieerd.
Beide blokken kunnen willekeurige klassieke berekeningen bevatten, afgezien van de gebruikelijke beperkingen voor het automatisch genereren van aangrenzende versies die van toepassing zijn op het within
blok. Veranderlijk gebonden variabelen die als onderdeel van het within
blok worden gebruikt, kunnen niet opnieuw worden toegewezen als onderdeel van het apply
blok.