Jaké jsou hlavní komponenty programu v jazyce Q#?
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;
}