Sdílet prostřednictvím


Podmíněné větvení

Podmíněné větvení se vyjadřuje ve formě if výrazů. Výraz if se skládá z if klauzule, za kterou následuje nula nebo více elif klauzulí a volitelně blok else-block. Každá klauzule se řídí vzorem.

keyword condition {
    <statements>
}

kde keyword je nahrazena if nebo elif v uvedeném pořadí, condition je výraz typu Boola <statements> má být nahrazen nulou nebo více příkazů. Volitelný elseblok -block se skládá z klíčového slova else následovaného nulou nebo více příkazů uzavřených ve složených závorkách, { }.

První blok, pro který condition se vyhodnotí jako true spuštěný. Blok else , pokud je k dispozici, se spustí, pokud se žádná z podmínek nevyhodnotí jako true. Blok se spustí ve svém vlastním oboru, což znamená, že všechny vazby vytvořené jako součást bloku se po skončení bloku nezobrazí.

Předpokládejme například, že qubits je hodnota typu Qubit[] a r1 r2 jsou typu Result,

if r1 == One {
    let q = qubits[0];
    H(q);
} 
elif r2 == One {
    let q = qubits[1];
    H(q);
} 
else {
    H(qubits[2]);
}

Můžete také vyjádřit jednoduché větvení ve formě podmíněného výrazu.

Omezení specifická pro konkrétní cíle

Úzká integrace mezi konstrukcemi toku řízení a kvantovými výpočty představuje výzvu pro aktuální kvantový hardware. Některé kvantové procesory nepodporují větvení na základě výsledků měření. Porovnání hodnot typu Result proto vždy způsobí chybu kompilace pro Q# programy, které jsou cílem spuštění na tomto hardwaru.

Jiné kvantové procesory podporují specifické druhy větvení na základě výsledků měření. Obecnější if výrazy podporované v Q# těchto procesorech jsou zkompilovány do vhodných instrukcí, které lze spouštět na těchto procesorech. Uložená omezení jsou, že hodnoty typu Result lze porovnat pouze jako součást podmínky v rámci if výrazů v operacích. Bloky podmíněného spuštění navíc nesmí obsahovat žádné return výrazy ani aktualizovat proměnlivé proměnné deklarované mimo tento blok.