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# 提供許多您可能已經熟悉的內建類型,包括 Int
、Double
、Bool
和 String
。 Q# 也提供量子運算特有的類型,例如 Qubit
和 Result
。
在此範例中,MeasureOneQubit
作業會傳回 Result
類型。 Result
類型是測量量子位元的結果,可以是 One
或 Zero
。
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 基底中對一或多個量子位元進行聯合測量,其可為 PauliX
、PauliY
或 PauliZ
。 Measure
運算會傳回 Result
類型 (也就是 One
或 Zero
)。
若要在計算基底 $\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);