Coniugazioni
Le coniugazioni sono comuni nei calcoli quantistici. In termini matematici, sono modelli di forma U†VU per due trasformazioni unitari U e V. Questo modello è rilevante a causa delle particolarità della memoria quantistica: i calcoli creano correlazioni quantistiche o entanglement, per usare gli asset univoci del quantum. Tuttavia, ciò significa anche che una volta che una subroutine non ha più bisogno dei relativi qubit, questi qubit non possono essere facilmente reimpostati e rilasciati poiché l'osservazione dello stato influirà sul resto del sistema. Per questo motivo, l'effetto di un calcolo precedente deve in genere essere invertito prima di rilasciare e riutilizzare la memoria quantistica.
Q# ha quindi un costrutto dedicato per esprimere i calcoli che richiedono tale pulizia. Le espressioni sono costituite da due blocchi di codice, uno contenente l'implementazione di U e uno contenente l'implementazione di V. Il di annullamento della (ovvero, l'applicazione di U†) viene eseguita automaticamente come parte dell'espressione.
L'espressione assume il formato
within {
<statements>
}
apply {
<statements>
}
dove <statements>
viene sostituito con un numero qualsiasi di istruzioni che definiscono rispettivamente l'implementazione di U e V.
Entrambi i blocchi possono contenere calcoli classici arbitrari, a parte le normali restrizioni per la generazione automatica di versioni adiacenti applicabili al blocco within
. Le variabili associate mutably usate come parte del blocco within
potrebbero non essere riassegnate come parte del blocco apply
.