Vilka är huvudkomponenterna i ett Q#-program?
Innan du börjar skriva kvantprogram är det viktigt att förstå strukturen och komponenterna i ett Q#-program.
I den här lektionen granskar du huvudkomponenterna i ett Q#-program.
Åtgärden Main
Varje Q#-program måste innehålla minst en åtgärd, vilket vanligtvis är åtgärden Main
. Åtgärden Main
är startpunkten för ditt program. Som standard börjar Q#-kompilatorn köra ett program från åtgärden Main()
. Du kan också använda @EntryPoint()
attributet för att ange alla åtgärder i programmet som körningsplats.
Följande kod definierar till exempel en startpunktsåtgärd: MeasureOneQubit
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
Du kan dock också skriva den koden utan @EntryPoint()
attributet genom att byta namn på MeasureOneQubit()
åtgärden till Main()
:
// The Q# compiler automatically detects the Main() operation as the entry point.
operation Main() : Result {
...
}
Typer
Q# innehåller många inbyggda typer som du kanske redan är bekant med, till exempel Int
, Double
, Bool
och String
. Q# innehåller också typer som är specifika för kvantberäkning, till exempel Qubit
och Result
.
I det här exemplet returnerar åtgärden MeasureOneQubit
en Result
typ. En Result
typ är resultatet av att mäta en kvantbit och kan vara antingen One
eller Zero
.
operation MeasureOneQubit() : Result {
...
}
Kvantbibliotek
Q#-biblioteken innehåller funktioner och åtgärder som du kan använda i kvantprogram. När du anropar en funktion eller åtgärd från ett bibliotek använder import
du direktivet och anger bibliotekets namnområde. Om du till exempel vill använda Message
funktionen från Microsoft.Quantum.Intrinsic
namnområdet i kvantbiblioteket Standard gör du följande:
// 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!");
Namnområden i standardbiblioteket kan importeras med i Std
stället för Microsoft.Quantum
. Till exempel:
// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
Message("Hello quantum world!");
Allokera qubitar
Om du vill allokera en kvantbit i Q# använder du nyckelordet use
och Qubit
typen . Varje qubit som du allokerar med nyckelordet use
börjar i tillståndet $\ket{0}$ .
Du kan allokera en eller flera qubitar i taget. Här är ett exempel som allokerar en och fem kvantbitar:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Mäta kvantbitar
I Q# Measure
utför åtgärden en gemensam mätning av en eller flera kvantbitar i de angivna Pauli-baserna, som kan vara PauliX
, PauliY
eller PauliZ
. Åtgärden Measure
returnerar en Result
typ som är antingen One
eller Zero
.
Om du vill implementera ett mått i beräkningsbasen $\lbrace\ket{0},\ket{1}\rbrace$ kan du också använda M
åtgärden, som utför ett mått i Pauli Z-basis. M
Åtgärden motsvarar därför att tillämpa Measure([PauliZ], [qubit])
.
Återställa kvantbitar
I Q# måste qubits vara i tillståndet $\ket{0}$ när de släpps. När du har använt en qubit använder du åtgärden Reset
för att återställa kvantbiten till $\ket{0}$.
// Reset the qubit so it can be safely released.
Reset(qubit);