Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La bifurcación condicional se expresa en forma de expresiones if. Una expresión if consta de una cláusula if, seguida de cero o más cláusulas elif y, opcionalmente, un bloque else. Cada cláusula sigue el patrón
keyword condition {
<statements>
}
donde keyword se reemplaza por if o elif respectivamente, condition es una expresión de tipo Booly <statements> se va a reemplazar por cero o más instrucciones. El else-block opcional consta de la palabra clave else seguido de cero o más instrucciones entre llaves, {}.
Primer bloque para el que se ejecutará el condition se evalúa como true. El bloque else, si está presente, se ejecuta si ninguna de las condiciones se evalúa como true. El bloque se ejecuta en su propio ámbito, lo que significa que los enlaces realizados como parte del bloque no son visibles después de que finalice el bloque.
Por ejemplo, supongamos que qubits es el valor de tipo Qubit[] y r1 y r2 son de tipo Result,
if r1 == One {
let q = qubits[0];
H(q);
}
elif r2 == One {
let q = qubits[1];
H(q);
}
else {
H(qubits[2]);
}
También puede expresar la bifurcación simple en forma de una expresión condicional .
Restricciones específicas del destino
La estrecha integración entre las construcciones de flujo de control y los cálculos cuánticos supone un desafío para el hardware cuántico actual. Algunos procesadores cuánticos no admiten la bifurcación en función de los resultados de la medición. Por lo tanto, la comparación de valores de tipo Result siempre producirá un error de compilación para Q# programas destinados a ejecutarse en dicho hardware.
Otros procesadores cuánticos admiten tipos específicos de bifurcación en función de los resultados de la medición. Las expresiones de if más generales admitidas en Q# se compilan en instrucciones adecuadas que se pueden ejecutar en dichos procesadores. Las restricciones impuestas son que los valores de tipo Result solo se pueden comparar como parte de la condición dentro de if expresiones en operaciones. Además, los bloques de ejecución condicional no pueden contener expresiones return ni actualizar variables mutables declaradas fuera de ese bloque.