Q# 程式的主要元件為何?

已完成

開始撰寫量子程式之前,請務必了解 Q# 程式的結構和元件。

在本單元中,您將檢閱 Q# 程式的主要元件。

Main 作業

每個 Q# 程式至少必須包含一個作業,通常是 Main 作業。 此 Main 作業是您程序的進入點。 根據預設,Q# 編譯程式會開始從 Main() 作業執行程式。 您可以選擇性地使用 @EntryPoint() 屬性,將程式中的任何作業指定為執行點。

例如,下列程式碼會定義進入點作業: MeasureOneQubit

@EntryPoint()
operation MeasureOneQubit() : Result {
    ...
}

不過,您也可以將 MeasureOneQubit() 作業重新命名為 Main(),以撰寫不含 @EntryPoint()屬性的程式碼:

// The Q# compiler automatically detects the Main() operation as the entry point. 
operation Main() : Result {
    ...
}

類型

Q# 提供許多您可能已經熟悉的內建類型,包括 IntDoubleBoolString。 Q# 也提供量子運算特有的類型,例如 QubitResult

在此範例中,MeasureOneQubit 作業會傳回 Result 類型。 Result 類型是測量量子位元的結果,可以是 OneZero

operation MeasureOneQubit() : Result {
    ...
}

量子程式庫

Q# 程式庫包含您可在量子程式中使用的函式和運算。 當您從程式庫呼叫函式或運算時,您可以使用 import 指示詞並指定該程式庫的命名空間。 例如,若要從標準量子連結庫中的 Microsoft.Quantum.Intrinsic 命名空間使用 Message 函式,請執行下列動作:

// 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!");

標準連結庫中的命名空間可以使用 Std 來匯入,而不是 Microsoft.Quantum。 例如:

// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
    Message("Hello quantum world!");

配置量子位元

在 Q# 中,若要配置量子位元,您可以使用 use 關鍵詞和 Qubit 類型。 您使用 use 關鍵字配置的每一個量子位元都會以 $\ket{0}$ state 狀態開始。

您可以一次配置一或多個量子位元。 以下是配置一個和五個量子位元的範例:

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

測量量子位元

在 Q# 中,Measure 運算會在指定的 Pauli 基底中對一或多個量子位元進行聯合測量,其可為 PauliXPauliYPauliZMeasure 運算會傳回 Result 類型 (也就是 OneZero)。

若要在計算基底 $\lbrace\ket{0},\ket{1}\rbrace$ 中實作測量,您也可以使用 M 運算,而該運算會在 Pauli Z 基底中進行測量。 因此,M 運算相當於套用 Measure([PauliZ], [qubit])

重設量子位元

在 Q# 中,量子位元在釋放時必須處於 $\ket{0}$ 狀態。 當您完成使用量子位元時,可以使用 Reset 運算,將量子位元重設為 $\ket{0}$。

    // Reset the qubit so it can be safely released.
    Reset(qubit);