Jak jsou programy Q# strukturované?
Než začnete psát kvantové programy, je důležité porozumět struktuře a komponentám programu v jazyce Q#.
V této lekci si projdete hlavní komponenty programu v jazyce Q#.
Operace Main
Každý program Q# musí obsahovat alespoň jednu operaci, což je obvykle Main
operace. Operace Main
je vstupním bodem programu. Kompilátor Q# ve výchozím nastavení spustí program z Main()
operace. Volitelně můžete pomocí atributu @EntryPoint()
určit jakoukoli operaci v programu jako bod provádění.
Například následující kód definuje operaci vstupního bodu: MeasureOneQubit
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
Tento kód ale můžete také napsat bez atributu @EntryPoint()
tak, že operaci přejmenujete na MeasureOneQubit()
Main()
:
// The Q# compiler automatically detects the Main() operation as the entry point.
operation Main() : Result {
...
}
Typy
Jazyk Q# poskytuje mnoho předdefinovaných typů, se kterými už možná znáte, včetně Int
, Double
, Bool
a String
. Jazyk Q# také poskytuje typy specifické pro kvantové výpočty, například Qubit
a Result
.
V tomto příkladu MeasureOneQubit
vrátí Result
operace typ. Typ Result
je výsledkem měření qubitu a může být buď One
nebo Zero
.
operation MeasureOneQubit() : Result {
...
}
Kvantové knihovny
Knihovny Q# obsahují funkce a operace, které můžete použít v kvantových programech. Při volání funkce nebo operace z knihovny použijete direktivu import
a určíte obor názvů knihovny. Pokud chcete například použít Message
funkci z Microsoft.Quantum.Intrinsic
oboru názvů v kvantové knihovně Standard, postupujte takto:
// 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!");
Obory názvů v knihovně Standard lze místo Std
Microsoft.Quantum
. Příklad:
// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
Message("Hello quantum world!");
Přidělování qubitů
V Q# k přidělení qubitu use
použijete klíčové slovo a Qubit
typ. Každý qubit, který přidělíte s klíčovým slovem use
, začíná ve stavu $\ket{0}$.
Najednou můžete přidělit jeden nebo více qubitů. Tady je příklad, který přiděluje jeden a pět qubitů:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Měření qubitů
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
, PauliY
nebo PauliZ
. Operace Measure
vrátí Result
typ, který je buď One
nebo Zero
.
K implementaci měření ve výpočetním základu $\lbrace\ket,\ket{0}{1}\rbrace$ můžete také použít M
operaci, která provádí měření v základu Pauli Z. Operace M
je tedy ekvivalentní použití Measure([PauliZ], [qubit])
.
Resetování qubitů
V Q# musí být qubity ve stavu $\ket{0}$ v době jejich uvolnění. Po dokončení použití qubitu Reset
použijete operaci k resetování qubitu na $\ket{0}$.
// Reset the qubit so it can be safely released.
Reset(qubit);