Bucles condicionales
Al igual que la mayoría de los lenguajes de programación clásicos, Q# admite bucles que se interrumpen en función de una condición: bucles cuyo número de iteraciones es desconocido y puede variar de una ejecución a otra. Dado que la secuencia de instrucciones es desconocida en tiempo de compilación, el compilador controla estos bucles condicionales de una manera determinada en un entorno de ejecución cuántico.
Importante
Restricciones de hardware cuántico
Los bucles que se interrumpen en función de una condición son difíciles de procesar en hardware cuántico si la condición depende de los resultados de la medición, ya que la longitud de la secuencia de instrucciones que se va a ejecutar no se conoce con antelación.
A pesar de su presencia habitual en determinadas clases de algoritmos cuánticos, el hardware actual aún no ofrece compatibilidad nativa para este tipo de construcciones de flujo de control. La ejecución de estos tipos de bucles en hardware cuántico puede admitirse potencialmente en el futuro mediante la imposición de un número máximo de iteraciones, o a medida que esté disponible compatibilidad con hardware adicional. Sin embargo, los simuladores cuánticos ejecutarán bucles basados en medidas.
Compilación de bucles
En tanto que la condición no dependa de las medidas cuánticas, los bucles condicionales se procesan con una compilación Just-In-Time antes de enviar la secuencia de instrucciones al procesador cuántico. En particular, el uso de bucles condicionales dentro de funciones no es problemático, ya que el código de las funciones siempre se puede ejecutar en el hardware convencional (no cuántico). Q#, por lo tanto, admite el uso de bucles tradicionales while
dentro de las funciones.
Repetir expresión
Al ejecutar programas en simuladores cuánticos, Q# permite expresar el flujo de control que depende de los resultados de las mediciones cuánticas.
Esta funcionalidad permite implementaciones probabilísticas que pueden reducir significativamente los costos de cálculo.
Un ejemplo habitual son los patrones de repetición hasta el éxito, que repiten un cálculo hasta que se cumple una determinada condición, que suele depender de una medida. Estos bucles repeat
se usan ampliamente en clases determinadas de algoritmos cuánticos. Por lo tanto, Q# cuenta con una construcción de lenguaje dedicada para expresarlos, a pesar de que todavía suponen un reto para su ejecución en hardware cuántico.
La repeat
expresión tiene la siguiente forma
repeat {
// ...
}
until condition
fixup {
// ...
}
O bien, alternativamente:
repeat {
// ...
}
until condition;
donde condition
es una expresión arbitraria de tipo Bool
.
El repeat
bucle ejecuta un bloque de instrucciones antes de evaluar una condición. Si la condición se evalúa como verdadera, se sale del bucle. Si la condición se evalúa como falsa, se ejecuta un bloque adicional de sentencias definidas como parte de un bloque fixup
opcional, si está presente, antes de entrar en la siguiente iteración del bucle.
Bucle while
Un bucle de búsqueda más familiar para cálculos clásicos es el while
bucle , que consta de la palabra clave while
, una expresión de tipo Bool
y un bloque de instrucciones.
Por ejemplo, si arr
es una matriz de enteros positivos,
mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
set item = arr[index];
set index += 1;
}
El bloque de instrucciones se ejecuta mientras la condición se evalúe como true
.
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente las Cuestiones de GitHub como mecanismo de retroalimentación para el contenido y lo sustituiremos por un nuevo sistema de retroalimentación. Para más información, consulta:Enviar y ver comentarios de