Pętle warunkowe
Podobnie jak w przypadku większości klasycznych języków programowania, Q# obsługuje pętle, które przerywają się na podstawie warunku: pętle, dla których liczba iteracji jest nieznana i może się różnić od uruchomienia do uruchomienia. Ponieważ sekwencja instrukcji jest nieznana w czasie kompilacji, kompilator obsługuje te pętle warunkowe w określony sposób w środowisku uruchomieniowym kwantowym.
Ważne
Ograniczenia sprzętu kwantowego
Pętle, które przerywają się na podstawie warunku, są trudne do przetworzenia na sprzęcie kwantowym, jeśli warunek zależy od wyników pomiaru, ponieważ długość sekwencji instrukcji do uruchomienia nie jest znana z wyprzedzeniem.
Pomimo ich wspólnej obecności w konkretnych klasach algorytmów kwantowych bieżący sprzęt nie zapewnia jeszcze natywnej obsługi tego rodzaju konstrukcji przepływu sterowania. Uruchamianie tego rodzaju pętli na sprzęcie kwantowym może być potencjalnie obsługiwane w przyszłości przez nałożenie maksymalnej liczby iteracji lub udostępnienie dodatkowej obsługi sprzętu. Symulatory kwantowe będą jednak uruchamiać wszystkie pętle na podstawie pomiarów.
Kompilowanie pętli
Tak długo, jak warunek nie zależy od pomiarów kwantowych, pętle warunkowe są przetwarzane przy użyciu kompilacji just in time przed wysłaniem sekwencji instrukcji do procesora kwantowego. W szczególności używanie pętli warunkowych w ramach funkcji jest nieproblematyczne, ponieważ kod w ramach funkcji może zawsze działać na konwencjonalnym (nie kwantowym) sprzęcie. Q#w związku z tym obsługuje stosowanie tradycyjnych while
pętli w funkcjach.
Powtórz wyrażenie
Podczas uruchamiania programów w symulatorach Q# kwantowych można wyrazić przepływ sterowania, który zależy od wyników pomiarów kwantowych.
Ta funkcja umożliwia probabilistyczne implementacje, które mogą znacznie zmniejszyć koszty obliczeniowe.
Typowym przykładem jest wzorzec powtarzania do powodzenia , który powtarza obliczenia do momentu spełnienia określonego warunku , który zwykle zależy od miary. Takie repeat
pętle są powszechnie używane w określonych klasach algorytmów kwantowych. Q# dlatego ma dedykowaną konstrukcję języka do wyrażania ich, mimo że nadal stanowią one wyzwanie do wykonania na sprzęcie kwantowym.
Wyrażenie repeat
ma następującą formę
repeat {
// ...
}
until condition
fixup {
// ...
}
lub alternatywnie
repeat {
// ...
}
until condition;
gdzie condition
jest dowolne wyrażenie typu Bool
.
Pętla repeat
uruchamia blok instrukcji przed oceną warunku. Jeśli warunek ma wartość true, pętla kończy działanie. Jeśli warunek ma wartość false, zostanie uruchomiony dodatkowy blok instrukcji zdefiniowany jako część opcjonalnego fixup
bloku, jeśli istnieje, przed wprowadzeniem iteracji następnej pętli.
Pętla while
Bardziej znaną pętlą do obliczeń klasycznych jest while
pętla, która składa się ze słowa kluczowego while
, wyrażenia typu Bool
i bloku instrukcji.
Na przykład, jeśli arr
jest tablicą dodatnich liczb całkowitych,
mutable (item, index) = (-1, 0);
while index < Length(arr) && item < 0 {
set item = arr[index];
set index += 1;
}
Blok instrukcji jest uruchamiany tak długo, jak warunek daje wartość true
.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla