Loops condicionais
Assim na maioria das linguagens de programação clássicas, Q# dá suporte a loops que são interrompidos de acordo com uma condição: loops para os quais o número de iterações é desconhecido e pode variar de execução para execução. Como a sequência de instruções é desconhecida em tempo de compilação, o compilador processa esses loops condicionais de uma forma específica em um runtime quântico.
Importante
Restrições de hardware quântico
Loops que quebram com base em uma condição são desafiadores para processar em hardware quântico se a condição depende de resultados de medida, já que o comprimento da sequência de instruções a ser executada não é conhecido antecipadamente.
Apesar da presença comum em classes específicas de algoritmos quânticos, o hardware atual ainda não dá suporte nativo para esses tipos de constructos de fluxo de controle. A execução desses tipos de loops no hardware quântico pode potencialmente ter suporte no futuro impondo um número máximo de iterações ou à medida que o suporte a hardware adicional se torna disponível. No entanto, os simuladores quânticos executarão loops com base em medidas.
Compilando loops
Desde que a condição não dependa de medidas quânticas, os loops condicionais são processados com uma compilação Just-In-Time antes que a sequência de instruções seja enviada ao processador quântico. Especificamente, não há problemas no uso de loops condicionais em funções, pois o código nas funções pode ser executado em hardware convencional (não quântico). Q#, portanto, dá suporte ao uso de loops tradicionais while
dentro de funções.
Repetir expressão
Ao executar programas em simuladores quânticos, Q# permite expressar o fluxo de controle que depende dos resultados das medidas quânticas.
Essa funcionalidade permite implementações probabilísticas que podem reduzir significativamente os custos de computação.
Um exemplo comum são os padrões repeat-until-success, que repetem uma computação até que uma determinada condição, que geralmente depende de uma medida, seja atendida. Esses loops repeat
são muito usados em classes específicas de algoritmos quânticos. Por isso, o Q# tem um constructo de linguagem dedicado para expressá-los, embora a execução deles em hardware quântico ainda seja um desafio.
A repeat
expressão assume a seguinte forma
repeat {
// ...
}
until condition
fixup {
// ...
}
ou, como alternativa,
repeat {
// ...
}
until condition;
em que condition
é uma expressão arbitrária do tipo Bool
.
O repeat
loop executa um bloco de instruções antes de avaliar uma condição. Se a condição é avaliada como true, o loop existe. Se a condição é avaliada como false, um bloco de instruções adicional definido em um bloco de fixup
opcional (se estiver presente) é executado antes da entrada na próxima iteração do loop.
Loop while
Um loop de aparência mais familiar para cálculos clássicos é o while
loop , que consiste no palavra-chave while
, uma expressão do tipo Bool
e um bloco de instrução.
Por exemplo, se arr
for uma matriz de inteiros positivos,
mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
set item = arr[index];
set index += 1;
}
O bloco de instruções é executado desde que a condição seja avaliada como true
.
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de