Konjugation
Konjugationer är vanliga i kvantberäkningar. I matematiska termer är de mönster i formatet U†VU för två enhetstransformeringar U och V. Det mönstret är relevant på grund av kvantminnets särskilda egenskaper: beräkningar bygger upp kvantkorrelationer eller sammanflätning för att utnyttja kvanttillgångarna. Men det innebär också att när en subrutin inte längre behöver dess kvantbitar, kan dessa kvantbitar inte enkelt återställas och släppas eftersom observera deras tillstånd skulle påverka resten av systemet. Av den anledningen måste effekten av en tidigare beräkning vanligtvis vändas innan kvantminnet frigörs och återanvänds.
Q# har därför en dedikerad konstruktion för att uttrycka beräkningar som kräver en sådan rensning. Uttrycken består av två kodblock, ett som innehåller implementeringen av U och ett som innehåller implementeringen av V. Avräkning (d.v.s. tillämpningen av U†) görs automatiskt som en del av uttrycket.
Uttrycket har formatet
within {
<statements>
}
apply {
<statements>
}
där <statements>
ersätts med valfritt antal instruktioner som definierar implementeringen av U respektive V .
Båda blocken within
kan innehålla godtyckliga klassiska beräkningar, förutom de vanliga begränsningarna för att automatiskt generera angränsande versioner som gäller för blocket. Variabler som är mutabelt bundna som används som en del av within
blocket kanske inte omtilldelas som en del av apply
blocket.