次の方法で共有


条件分岐

条件分岐は、if 式の形式で表されます。 if 式は、if 句の後に 0 個以上の elif 句と、必要に応じて else-block で構成されます。 各句はパターンに従います

keyword condition {
    <statements>
}

ここで、keyword はそれぞれ if または elif に置き換えられ、conditionBool型の式であり、<statements> は 0 個以上のステートメントに置き換えられます。 省略可能な else-block は、キーワード else の後に中かっこで囲まれた 0 個以上のステートメントで構成 {}

conditiontrue に評価される最初のブロックが実行されます。 else ブロックが存在する場合、どの条件も trueと評価されない場合に実行されます。 ブロックは独自のスコープで実行されます。つまり、ブロックの一部として行われたバインドは、ブロックの終了後は表示されません。

たとえば、qubitsQubit[] 型の値であり、r1r2Result型であるとします。

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

また、単純な分岐を 条件式の形式で表現することもできます。

ターゲット固有の制限

制御フロー コンストラクトと量子計算の緊密な統合は、現在の量子ハードウェアにとって課題となります。 特定の量子プロセッサでは、測定結果に基づく分岐がサポートされていません。 そのため、Result 型の値を比較すると、常に、このようなハードウェアで実行する対象 Q# プログラムのコンパイル エラーが発生します。

その他の量子プロセッサでは、測定結果に基づく特定の種類の分岐がサポートされています。 Q# でサポートされるより一般的な if 式は、そのようなプロセッサで実行できる適切な命令にコンパイルされます。 制限が課せられるのは、Result 型の値は、演算の式内の条件の一部としてのみ比較 if。 さらに、条件付き実行ブロックには、return 式を含めたり、そのブロックの外部で宣言されている変更可能な変数を更新したりすることはできません。