Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A ramificação condicional é expressa na forma de expressões if. Uma expressão if consiste em uma cláusula if, seguida por zero ou mais cláusulas elif e, opcionalmente, um bloco de outro. Cada cláusula segue o padrão
keyword condition {
<statements>
}
em que keyword é substituído por if ou elif respectivamente, condition é uma expressão do tipo Boole <statements> deve ser substituído por zero ou mais instruções. O bloco de elseopcional consiste na palavra-chave else seguida por zero ou mais instruções entre chaves, {}.
O primeiro bloco para o qual o condition é avaliado como true será executado. O bloco else, se presente, é executado se nenhuma das condições for avaliada como true. O bloco é executado em seu próprio escopo, o que significa que as associações feitas como parte do bloco não são visíveis após o término do bloco.
Por exemplo, suponha que qubits seja o valor do tipo Qubit[] e r1 e r2 sejam do tipo Result,
if r1 == One {
let q = qubits[0];
H(q);
}
elif r2 == One {
let q = qubits[1];
H(q);
}
else {
H(qubits[2]);
}
Você também pode expressar ramificação simples na forma de uma expressão condicional .
Restrições específicas de destino
A integração apertada entre constructos de fluxo de controle e cálculos quânticos representa um desafio para o hardware quântico atual. Determinados processadores quânticos não dão suporte à ramificação com base nos resultados da medida. Dessa forma, a comparação de valores do tipo Result sempre resultará em um erro de compilação para programas de Q# destinados a serem executados nesse hardware.
Outros processadores quânticos dão suporte a tipos específicos de ramificação com base nos resultados da medida. As expressões de if mais gerais compatíveis com Q# são compiladas em instruções adequadas que podem ser executadas nesses processadores. As restrições impostas são de que os valores do tipo Result só podem ser comparados como parte da condição dentro de expressões if em operações. Além disso, os blocos de execução condicional não podem conter nenhuma expressão return ou atualizar variáveis mutáveis declaradas fora desse bloco.