Bedingungsverzweigung
Die bedingte Verzweigung wird in Form von if
Ausdrücken ausgedrückt. Ein if
Ausdruck besteht aus einer if
-Klausel, gefolgt von null oder mehr elif
Klauseln und optional einem else-block. Jede Klausel hat das folgende Muster:
keyword condition {
<statements>
}
keyword
wird dabei durch if
oder elif
ersetzt, condition
ist ein Ausdruck vom Typ Bool
, und <statements>
muss durch null oder mehr Anweisungen ersetzt werden. Der optionale else
-Block besteht aus dem Schlüsselwort else
, gefolgt von null oder mehr Anweisungen in geschweiften Klammern ({
}
).
Der erste Block, für den condition
die Auswertung true
ergibt, wird ausgeführt. Der else
-Block (sofern vorhanden) wird ausgeführt, wenn keine der Bedingungen als true
ausgewertet wird. Der Block wird in seinem eigenen Bereich ausgeführt, d. h. alle Bindungen, die als Teil des Blocks vorgenommen werden, sind nach dem Ende des Blocks nicht sichtbar.
Angenommen, qubits
ist ein Wert vom Typ Qubit[]
und r1
und r2
sind vom Typ Result
.
if r1 == One {
let q = qubits[0];
H(q);
}
elif r2 == One {
let q = qubits[1];
H(q);
}
else {
H(qubits[2]);
}
Einfache Verzweigungen können auch in Form eines bedingten Ausdrucks ausgedrückt werden.
Zielspezifische Einschränkungen
Die enge Integration zwischen Ablaufsteuerungskonstrukten und Quantenberechnungen stellt eine Herausforderung für die aktuelle Quantenhardware dar. Bestimmte Quantenprozessoren unterstützen keine Verzweigung basierend auf Messergebnissen. Der Vergleich von Werten vom Typ Result
führt daher immer zu einem Kompilierungsfehler für Q#-Programme, die auf dieser Hardware ausgeführt werden sollen.
Andere Quantenprozessoren unterstützen bestimmte Arten von Verzweigungen basierend auf Messergebnissen. Die allgemeineren if
Ausdrücke, die in Q# unterstützt werden, werden in geeignete Anweisungen kompiliert, die auf solchen Prozessoren ausgeführt werden können. Die auferlegten Einschränkungen sind, dass Werte des Typs Result
nur als Teil der Bedingung innerhalb if
von Ausdrücken in Vorgängen verglichen werden dürfen. Darüber hinaus dürfen die Blöcke mit bedingter Ausführung keine return
Ausdrücke enthalten oder veränderliche Variablen aktualisieren, die außerhalb dieses Blocks deklariert werden.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für