Koşullu döngüler

Çoğu klasik programlama dili gibi, Q# bir koşula göre kesilen döngüleri destekler: yineleme sayısının bilinmediği ve çalıştırmadan çalıştırmaya farklılık gösterebileceği döngüler. Yönerge dizisi derleme zamanında bilinmediğinden, derleyici bu koşullu döngüleri kuantum çalışma zamanında belirli bir şekilde işler.

Önemli

Kuantum donanımı kısıtlamaları

Yönerge dizisinin çalıştırılacak uzunluğu önceden bilinmediğinden, koşul ölçüm sonuçlarına bağlıysa, bir koşula dayalı olarak kopan döngülerin kuantum donanımında işlenmesi zordur.

Belirli kuantum algoritmaları sınıflarında ortak bulunmalarına rağmen, geçerli donanım henüz bu tür denetim akışı yapıları için yerel destek sağlamaz. Kuantum donanımında bu tür döngülerin çalıştırılması, gelecekte maksimum sayıda yineleme uygulanarak veya ek donanım desteği kullanılabilir hale geldikçe desteklenebilir. Ancak kuantum simülatörleri ölçümlere göre tüm döngüleri çalıştırır.

Derleme döngüleri

Koşul kuantum ölçümlerine bağımlı olmadığı sürece, yönerge dizisini kuantum işlemcisine göndermeden önce koşullu döngüler tam zamanında derlemeyle işlenir. İşlevler içindeki kod her zaman geleneksel (kuantum olmayan) donanımlarda çalıştırılabildiği için özellikle işlevler içinde koşullu döngülerin kullanılması engelleyici değildir. Q#bu nedenle, işlevler içinde geleneksel while döngülerin kullanımını destekler.

İfadeyi yinele

Programları kuantum simülatörlerinde çalıştırırken, Q# kuantum ölçümlerinin sonuçlarına bağlı denetim akışını ifade etmenizi sağlar. Bu özellik, hesaplama maliyetlerini önemli ölçüde azaltabilen olasılığa dayalı uygulamaları etkinleştirir. Genellikle ölçüme bağlı olan belirli bir koşul karşılanana kadar hesaplamayı yineleyen başarıya kadar yinele deseni yaygın bir örnektir. Bu tür repeat döngüler, kuantum algoritmalarının belirli sınıflarında yaygın olarak kullanılır. Q# bu nedenle, kuantum donanımında yürütme için hala bir zorluk oluşturmalarına rağmen bunları ifade etmek için ayrılmış bir dil yapısına sahiptir.

İfade repeat aşağıdaki formu alır

repeat {
    // ...
}
until condition
fixup {
    // ...
}

veya alternatif olarak

repeat {
    // ...
}
until condition;

burada condition türünde Boolrastgele bir ifadedir.

Döngü, repeat bir koşulu değerlendirmeden önce bir deyim bloğu çalıştırır. Koşul true olarak değerlendirilirse döngüden çıkar. Koşul false olarak değerlendirilirse, varsa isteğe bağlı fixup bir bloğun parçası olarak tanımlanan ek bir deyim bloğu, sonraki döngü yinelemesine girmeden önce çalıştırılır.

while döngüsü

Klasik hesaplamalar için daha tanıdık görünen bir döngü, anahtar sözcüğünden while, türünde Boolbir ifadeden ve bir deyim bloğundan oluşan döngüdürwhile. Örneğin, pozitif tamsayılardan oluşan bir diziyse arr ,

mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
    set item = arr[index];
    set index += 1;
}

Koşul olarak değerlendirildiğinde deyimi bloğu çalıştırılır true.