조건부 분기

조건부 분기는 식 형식 if 으로 표현됩니다. 식은 if 절과 if 0개 이상의 elif 절, 선택적으로 else 블록으로 구성됩니다. 각 절은 패턴을 따릅니다.

keyword condition {
    <statements>
}

여기서 keyword는 각각 if 또는 elif로 바뀌고, conditionBool 형식의 식이며, <statements>은 0개 이상의 문으로 바뀝니다. 선택적 else 블록은 else 키워드와 중괄호({})로 묶인 0개 이상의 문으로 차례로 구성됩니다.

condition에서 true로 평가하는 첫 번째 블록이 실행됩니다. else 블록이 있는 경우 true로 평가하는 조건이 없으면 이 블록이 실행됩니다. 블록은 자체 scope 실행되므로 블록의 일부로 만들어진 바인딩은 블록이 종료된 후에 표시되지 않습니다.

예를 들어 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 하거나 해당 블록 외부에서 선언된 변경 가능한 변수를 업데이트할 수 없습니다.