Ciclos condicionais
Tal como a maioria das linguagens de programação clássicas, Q# suporta ciclos que quebram com base numa condição: ciclos para os quais o número de iterações é desconhecido e pode variar de execução para execução. Uma vez que a sequência de instruções é desconhecida no tempo de compilação, o compilador processa estes ciclos condicionais de uma forma específica num runtime quântico.
Importante
Restrições de hardware quântico
Os ciclos que quebram com base numa condição são difíceis de processar no hardware quântico se a condição depender dos resultados da medição, uma vez que a duração da sequência de instruções a executar não é conhecida antecipadamente.
Apesar da sua presença comum em classes específicas de algoritmos quânticos, o hardware atual ainda não fornece suporte nativo para estes tipos de construções de fluxo de controlo. Executar estes tipos de ciclos no hardware quântico pode potencialmente ser suportado no futuro ao impor um número máximo de iterações ou à medida que o suporte de hardware adicional fica disponível. No entanto, os simuladores quânticos executarão todos os ciclos com base nas medições.
Compilar ciclos
Desde que a condição não dependa das medições quânticas, os ciclos condicionais são processados com uma compilação just-in-time antes de enviar a sequência de instruções para o processador quântico. Em particular, a utilização de ciclos condicionais nas funções não é proproblemática, uma vez que o código dentro das funções pode sempre ser executado em hardware convencional (não quântico). Q#, portanto, suporta a utilização de ciclos tradicionais while
nas funções.
Repetir expressão
Ao executar programas em simuladores quânticos, Q# permite-lhe expressar o fluxo de controlo que depende dos resultados das medições quânticas.
Esta capacidade permite implementações probabilísticas que podem reduzir significativamente os custos computacionais.
Um exemplo comum é o padrão de repetição até ao sucesso , que repete uma computação até que uma determinada condição - que normalmente depende de uma medição - seja satisfeita. Estes repeat
ciclos são amplamente utilizados em classes específicas de algoritmos quânticos. Q# assim, tem uma construção de linguagem dedicada para expressá-los, apesar de ainda representarem um desafio para a execução no hardware quântico.
A repeat
expressão assume o seguinte formulário
repeat {
// ...
}
until condition
fixup {
// ...
}
ou, em alternativa,
repeat {
// ...
}
until condition;
em que condition
é uma expressão arbitrária do tipo Bool
.
O repeat
ciclo executa um bloco de instruções antes de avaliar uma condição. Se a condição for avaliada como verdadeira, o ciclo é fechado. Se a condição for avaliada como falsa, será executado um bloco adicional de instruções definido como parte de um bloco opcional fixup
, se estiver presente, antes de introduzir a iteração do ciclo seguinte.
Ciclo While
Um ciclo mais familiar para cálculos clássicos é o while
ciclo, que consiste na palavra-chave while
, numa expressão do tipo Bool
e num bloco de instrução.
Por exemplo, se arr
for uma matriz de números inteiros positivos,
mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
set item = arr[index];
set index += 1;
}
O bloco de instrução é executado desde que a condição seja avaliada como true
.
Comentários
https://aka.ms/ContentUserFeedback.
Brevemente: Ao longo de 2024, vamos descontinuar progressivamente o GitHub Issues como mecanismo de feedback para conteúdos e substituí-lo por um novo sistema de feedback. Para obter mais informações, veja:Submeter e ver comentários