Iterações

Os ciclos que iteram através de uma sequência de valores são expressos como for ciclos em Q#. Um for ciclo de entrada Q# não é interrompido com base numa condição, mas corresponde a uma iteração ou ao que é frequentemente expresso como foreach ou iter noutros idiomas. Atualmente, existem dois tipos de dados que Q# suportam a iteração: matrizes e intervalos.

A expressão consiste na palavra-chave for, seguida de um símbolo ou cadeia de identificação de símbolos, a palavra-chave in, uma expressão de matriz ou Range tipo e um bloco de instrução.

O bloco de instrução (o corpo do ciclo) é executado repetidamente, com uma ou mais variáveis de ciclo vinculadas a cada valor no intervalo ou matriz. As mesmas regras de desconstrução aplicam-se às variáveis de ciclo definidas como a qualquer outra atribuição de variável, como enlaces em let, mutable, sete useborrow instruções. As próprias variáveis de ciclo estão imutavelmente vinculadas, não podem ser reatribuídas no corpo do ciclo e ficam fora do âmbito quando o ciclo terminar. A expressão sobre a qual o ciclo itera é avaliada antes de introduzir o ciclo e não é alterada enquanto o ciclo está em execução.

Esta situação é ilustrada no seguinte exemplo. Suponha que qubits é um valor do tipo e, em Qubit[]seguida,

for qubit in qubits {
    H(qubit);
}

mutable results : (Int, Result)[] = [];
for index in 0 .. Length(qubits) - 1 {
    set results += [(index, M(qubits[index]))];
}

mutable accumulated = 0;
for (index, measured) in results {
    if measured == One {
        set accumulated += 1 <<< index;
    }
}

Restrições específicas do destino

Como não break existem ou continue primitivos no Q#, o comprimento do ciclo é conhecido assim que o valor de iteração é conhecido. Como tal, for os ciclos podem ser executados em todo o hardware quântico.