Was sind die Hauptkomponenten eines Q#-Programms?
Bevor Sie mit dem Schreiben von Quantenprogrammen beginnen, ist es wichtig, die Struktur und Komponenten eines Q#-Programms zu verstehen.
In dieser Einheit überprüfen Sie die Hauptkomponenten eines Q#-Programms.
Der Main
-Vorgang
Jedes Q#-Programm muss mindestens einen Vorgang enthalten, bei dem es sich in der Regel um den Main
-Vorgang handelt. Der Main
-Vorgang ist der Einstiegspunkt Ihres Programms. Standardmäßig startet der Q#-Compiler die Ausführung eines Programms über den Main()
-Vorgang. Optional können Sie das Attribut @EntryPoint()
verwenden, um einen beliebigen Vorgang im Programm als Ausführungspunkt anzugeben.
Der folgende Code definiert beispielsweise einen Einstiegspunktvorgang, MeasureOneQubit
:
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
Sie können diesen Code jedoch auch ohne das Attribut @EntryPoint()
schreiben, indem Sie den Vorgang MeasureOneQubit()
in Main()
umbenennen:
// The Q# compiler automatically detects the Main() operation as the entry point.
operation Main() : Result {
...
}
Typen
Q# bietet viele integrierte Typen, mit denen Sie möglicherweise bereits vertraut sind, einschließlich Int
, Double
, Bool
und String
. Q# bietet auch Typen, die spezifisch für Quantencomputing sind, z. B. Qubit
und Result
.
In diesem Beispiel gibt der Vorgang MeasureOneQubit
einen Result
-Typ zurück. Der Typ Result
ist das Ergebnis der Messung eines Qubits und kann entweder One
oder Zero
sein.
operation MeasureOneQubit() : Result {
...
}
Quantumbibliotheken
Die Q#-Bibliotheken enthalten Funktionen und Vorgänge, die Sie in Quantenprogrammen verwenden können. Wenn Sie eine Funktion oder einen Vorgang aus einer Bibliothek abrufen, verwenden Sie die import
-Direktive und geben Sie den Namespace der Bibliothek an. Wenn Sie beispielsweise die Message
-Funktion aus dem Microsoft.Quantum.Intrinsic
Namespace in der Standard-Quantenbibliothek verwenden möchten, gehen Sie wie folgt vor:
// imports all functions and operations from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.*;
Message("Hello quantum world!");
// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
Message("Hello quantum world!");
Namespaces in der Standardbibliothek können mithilfe von Std
anstelle von Microsoft.Quantum
importiert werden. Zum Beispiel:
// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
Message("Hello quantum world!");
Zuordnen von Qubits
In Q# verwenden Sie das use
-Schlüsselwort und den Qubit
-Typ, um ein Qubit zuzuweisen. Jedes Qubit, das Sie mit dem Schlüsselwort use
zuordnen, beginnt im Zustand „$\ket{0}$“.
Sie können ein oder mehrere Qubits gleichzeitig zuordnen. Hier ist ein Beispiel, das ein und fünf Qubits zuweist:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Messen von Qubits
In Q# führt der Measure
-Vorgang eine gemeinsame Messung eines oder mehrerer Qubits in den angegebenen Pauli-Basen durch. Diese können PauliX
, PauliY
oder PauliZ
sein. Der Vorgang Measure
gibt einen Result
-Typ zurück, der entweder One
oder Zero
ist.
Um eine Messung in der Rechenbasis „$\lbrace\ket{0},\ket{1}\rbrace$“ zu implementieren, können Sie auch den Vorgang M
verwenden, der eine Messung in der Pauli Z-Basis durchführt. Daher entspricht der Vorgang M
der Anwendung von Measure([PauliZ], [qubit])
.
Zurücksetzen von Qubits
In Q# müssen sich Qubits im Zustand „$\ket{0}$“ befinden, wenn sie freigegeben werden. Wenn Sie mit der Verwendung eines Qubits fertig sind, verwenden Sie den Reset
-Vorgang, um das Qubit auf „$\ket{0}$“ zurückzusetzen.
// Reset the qubit so it can be safely released.
Reset(qubit);