Jaké jsou hlavní komponenty programu v jazyce Q#?

Dokončeno

Než začnete psát vlastní kvantové programy, je důležité porozumět struktuře a komponentám programovacího jazyka Q#.

V této lekci se seznámíte se základními komponentami programu v jazyce Q#.

Operace Main

Každý program Q# musí obsahovat aspoň jednu operaci. Kompilátor Q# začne spouštět program z operace vstupního bodu, což je Main operace ve výchozím nastavení. Například následující program Q# obsahuje operaci, Main která vytvoří qubit a vrátí měření stavu qubitu:

// This operation is the entry point to your program because it's name is Main
operation Main() : Result {
    use q = Qubit();
    return M(q);
}

Kód Q# nejde spustit bez operace vstupního bodu. Pokud chcete použít jinou operaci než Main jako vstupní bod, použijte @EntryPoint() atribut. Například následující kód dává předchozí operaci popisnější název MeasureOneQubita definuje ji jako vstupní bod do programu Q#:

// The @EntryPoint() attribute tells the compiler to start running your code from this operation
@EntryPoint()
operation MeasureOneQubit() : Result {
    use q = Qubit();
    return M(q);
}

Typy

Jazyk Q# poskytuje mnoho předdefinovaných datových typů, které už možná znáte, například Int, Double, Boola String. Jazyk Q# také poskytuje typy, které jsou specifické pro kvantové výpočty, například Qubit a Result.

Například operace MeasureOneQubit vrátí typ hodnoty Result. Typ Result představuje stav qubitu při měření qubitu a může mít hodnotu buď Zero nebo One.

Kvantové knihovny

Q# obsahuje několik knihoven, které obsahují funkce a operace, které vám pomůžou psát kvantové programy. Pokud chcete volat funkci nebo operaci z knihovny, použijte import klíčové slovo a zadejte obor názvů knihovny. Pokud chcete například použít funkci Message z Std.Intrinsic namespace ve standardní knihovně pro kvantové výpočty, použijte následující kód:

// import all functions and operations from Std.Intrinsic 
import Std.Intrinsic.*;

operation Main() : Unit {
    // call the Message function from Std.Intrinsic
    Message("Hello quantum world!");
}

Hvězdička znamená, že importujete všechny funkce z Std.Intrinsic oboru názvů. Alternativně můžete importovat jenom Message funkci:

// import only the Message function from Std.Intrinsic 
import Std.Intrinsic.Message;

operation Main() : Unit {
    // call the Message function from Std.Intrinsic
    Message("Hello quantum world!");
}

Poznámka:

V jazyce Q# Unit typ znamená, že funkce nebo operace nevrací hodnotu. Další informace o typech v Q# naleznete v tématu Typový systém.

Pokud chcete prozkoumat standardní knihovnu Q#, projděte si referenční informace k rozhraní API.

Přidělení qubitu

Pokud chcete přidělit qubit v Q#, použijte use klíčové slovo a Qubit typ. Qubity, které přidělíte s klíčovým slovem use , se vždy spustí ve stavu $\ket{0}$.

V poli qubitů můžete přidělit jeden qubit nebo několik qubitů. Tady je příklad, který přiděluje jeden qubit v proměnné q1 a pole pěti qubitů v q5:

use q1 = Qubit();  // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

Měření qubitu

V jazyce Q# Measure operace provádí společné měření jednoho nebo více qubitů v zadaných základech Pauli, které mohou být PauliX, PauliYnebo PauliZ. Operace Measure vrátí Result typ, který má hodnotu buď Zero nebo One.

K provedení měření ve výpočetním základu $\lbrace\ket{c0},\ket{c1}\rbrace$ můžete také použít operaci {0}. Operace M je ekvivalentní Measure operaci v Pauli-Z základu, takže M([qubit]) se chová přesně stejně jako Measure([PauliZ], [qubit]). Operace M však přijímá jako vstup pouze jeden qubit, nikoli pole qubitů.

Resetování qubitů

V Q# musí být qubity ve stavu $\ket{0}$, aby je uvolnily. Po dokončení použití qubitu Reset zavolejte operaci, která qubit resetuje do stavu $\ket{0}$. Například následující kód přidělí qubit, měří stav qubitu a pak qubit resetuje:

operation Main() : Result {
    use q = Qubit();
    let result = M(q);

    // Reset the qubit so that you can release it
    Reset(q);

    return result;
    }