Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Rozgałęzianie warunkowe jest wyrażane w postaci wyrażeń if. Wyrażenie if składa się z klauzuli if, po której następuje zero lub więcej elif klauzul i opcjonalnie blok else-block. Każda klauzula jest zgodna ze wzorcem
keyword condition {
<statements>
}
gdzie keyword jest zastępowany odpowiednio if lub elif, condition jest wyrażeniem typu Bool, a <statements> ma zostać zastąpiony zero lub więcej instrukcji. Opcjonalny else-block składa się z else słowa kluczowego, po którym następuje zero lub więcej instrukcji ujętych w nawiasy klamrowe, {}.
Pierwszy blok, dla którego condition ocenia true zostanie uruchomiony. Jeśli jest obecny blok else, zostanie uruchomiony, jeśli żaden z warunków nie zostanie obliczony na true. Blok jest wykonywany we własnym zakresie, co oznacza, że wszystkie powiązania wykonane w ramach bloku nie są widoczne po zakończeniu bloku.
Załóżmy na przykład, że qubits jest wartością typu Qubit[], r1 i r2 mają typ Result,
if r1 == One {
let q = qubits[0];
H(q);
}
elif r2 == One {
let q = qubits[1];
H(q);
}
else {
H(qubits[2]);
}
Można również wyrazić proste rozgałęzianie w postaci wyrażenia warunkowego .
Ograniczenia specyficzne dla elementu docelowego
Ścisła integracja konstrukcji przepływu sterowania i obliczeń kwantowych stanowi wyzwanie dla bieżącego sprzętu kwantowego. Niektóre procesory kwantowe nie obsługują rozgałęziania na podstawie wyników pomiaru. W związku z tym porównanie wartości typu Result zawsze spowoduje błąd kompilacji dla Q# programów przeznaczonych do uruchamiania na takim sprzęcie.
Inne procesory kwantowe obsługują określone rodzaje rozgałęziania na podstawie wyników pomiaru. Bardziej ogólne wyrażenia if obsługiwane w Q# są kompilowane w odpowiednie instrukcje, które można uruchamiać na takich procesorach. Nałożone ograniczenia są następujące, że wartości typu Result mogą być porównywane tylko jako część warunku w if wyrażeniach w operacjach. Ponadto bloki uruchamiane warunkowo nie mogą zawierać żadnych wyrażeń return ani aktualizować zmiennych modyfikowalnych zadeklarowanych poza tym blokiem.