Vilka är huvudkomponenterna i ett Q#-program?

Slutförd

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, Booloch 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, PauliYeller 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);