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、 、 DoubleBoolString。 Q# 也提供量子運算特有的類型,例如 QubitResult

例如,作業 MeasureOneQubit 會傳回 Result 類型值。 量子位在被測量時,類型Result代表其狀態,而且可以有ZeroOne的值。

量子程式庫

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 基底中對一或多個量子位元進行聯合測量,其可為 PauliXPauliYPauliZ。 操作Measure會傳回一個擁有ZeroOne值的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;
    }