Q# 程式的主要元件為何?
在撰寫自己的量子程式之前,請務必瞭解 Q# 程式設計語言的結構和元件。
在本單元中,您將瞭解 Q# 程式的基本元件。
Main 作業
每個 Q# 程式都必須至少包含一個作業。 Q# 編譯器會從進入點作業開始執行程式,這是預設的 Main 作業。 例如,下列 Q# 程式包含名為 Main 的作業,可建立量子位,並傳回量子位狀態的測量:
// This operation is the entry point to your program because it's name is Main
operation Main() : Result {
use q = Qubit();
return M(q);
}
您的 Q# 程式碼無法在沒有進入點作業的情況下執行。 如果您想使用 Main 以外的作業作為您的進入點,則請使用 @EntryPoint() 屬性。 例如,下列程式碼會為上述作業提供更具描述性的名稱, MeasureOneQubit並將該作業定義為 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);
}
類型
Q# 提供許多您可能已經熟悉的內建資料類型,例如 Int、 、 DoubleBool和 String。 Q# 也提供量子運算特有的類型,例如 Qubit 和 Result。
例如,作業 MeasureOneQubit 會傳回 Result 類型值。 量子位在被測量時,類型Result代表其狀態,而且可以有Zero或One的值。
量子程式庫
Q# 隨附數個程式庫,其中包含函式和作業,可協助您撰寫量子程式。 若要從函式庫呼叫函式或作業,請使用 import 關鍵字並指定函式庫的命名空間。 例如,若要使用 Message 標準量子程式庫中命名空間中的 Microsoft.Quantum.Intrinsic 函數,請使用下列程式碼:
// import all functions and operations from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.*;
operation Main() : Unit {
// call the Message function from Microsoft.Quantum.Intrinsic
Message("Hello quantum world!");
}
星號表示您從Microsoft.Quantum.Intrinsic命名空間匯入所有函式。 或者,您可以只匯入函數:Message
// import only the Message function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
operation Main() : Unit {
// call the Message function from Microsoft.Quantum.Intrinsic
Message("Hello quantum world!");
}
備註
在 Q# 中, Unit 類型表示函式或作業不會傳回值。 如需 Q# 中類型的詳細資訊,請參閱 類型系統。
您可以使用 Std 而不是 Microsoft.Quantum 來匯入標準庫中的命名空間。 例如,下列程式碼會從命名空間匯 Microsoft.Quantum.Intrinsic 入所有函式和作業:
// import everything from Std.Intrinsic (Microsoft.Quantum.Intrinsic)
import Std.Intrinsic.*;
operation Main() : Unit {
// call the Message function from Std.Intrinsic
Message("Hello quantum world!");
}
若要探索 Q# 標準程式庫,請參閱 API 參考。
量子位配置
若要在 Q# 中配置量子位,請使用 use 關鍵字和 Qubit 類型。 您使用 use 關鍵字配置的量子位一律從 $\ket{0}$ 狀態開始。
您可以在量子位陣列中配置單一量子位元或多個量子位元。 以下範例會在變數 q1 中配置單一量子位元,並在變數中 q5配置五個量子位元的陣列:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
量子位元測量
在 Q# 中,Measure 運算會在指定的 Pauli 基底中對一或多個量子位元進行聯合測量,其可為 PauliX、PauliY 或 PauliZ。 操作Measure會傳回一個擁有Zero或One值的Result型別。
若要在計算基礎 $\lbrace\ket{0},\ket{1}\rbrace$ 中執行測量,您也可以使用該 M 運算。 該 M 操作等同於在 Pauli-Z 基中的 Measure 操作,因此 M([qubit]) 的行為完全與 Measure([PauliZ], [qubit]) 相同。 不過,作業 M 只接受單一量子位元作為輸入,而不是量子位陣列。
重設量子位元
在 Q# 中,量子位元必須處於 $\ket{0}$ 狀態,才能釋放它們。 當您完成使用量子位時,請呼叫作業 Reset ,將量子位重設為 $\ket{0}$ 狀態。 例如,下列程式碼會配置量子位元、測量量子位元的狀態,然後重設量子位元:
operation Main() : Result {
use q = Qubit();
let result = M(q);
// Reset the qubit so that you can release it
Reset(q);
return result;
}