คอมโพเนนต์หลักของโปรแกรม 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, Double, และ BoolString Q# ยังมีประเภทที่เฉพาะเจาะจงสําหรับการประมวลผลควอนตัม เช่น Qubit และResult

ตัวอย่างเช่น การดําเนินการส่งMeasureOneQubitResultกลับค่าชนิด Resultประเภทแสดงสถานะของคิวบิตเมื่อวัดคิวบิต และสามารถมีค่าอย่างใดอย่างZeroOneหนึ่ง หรือ

ไลบรารีควอนตัม

Q# มาพร้อมกับไลบรารีหลายตัวที่มีฟังก์ชันและการดําเนินการเพื่อช่วยคุณเขียนโปรแกรมควอนตัม เมื่อต้องการเรียกใช้ฟังก์ชันหรือการดําเนินการจากไลบรารี ให้ใช้คําสําคัญและ import ระบุเนมสเปซของไลบรารี ตัวอย่างเช่น เมื่อต้องการใช้ Message ฟังก์ชันจาก Std.Intrinsic เนมสเปซในไลบรารีควอนตัมมาตรฐาน ให้ใช้รหัสต่อไปนี้:

// import all functions and operations from Std.Intrinsic 
import Std.Intrinsic.*;

operation Main() : Unit {
    // call the Message function from Std.Intrinsic
    Message("Hello quantum world!");
}

เครื่องหมายดอกจันหมายความว่าคุณนําเข้าฟังก์ชันทั้งหมดจาก Std.Intrinsic เนมสเปซ หรือคุณสามารถนําเข้าเฉพาะ Message ฟังก์ชัน:

// import only the Message function from Std.Intrinsic 
import Std.Intrinsic.Message;

operation Main() : Unit {
    // call the Message function from Std.Intrinsic
    Message("Hello quantum world!");
}

Note

ใน Q# ชนิดหมายความว่า Unit ฟังก์ชันหรือการดําเนินการไม่ส่งกลับค่า สําหรับข้อมูลเพิ่มเติมเกี่ยวกับชนิดใน Q# โปรดดู ระบบชนิด

หากต้องการสํารวจไลบรารีมาตรฐาน 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 ที่ระบุ ซึ่งสามารถ PauliXPauliYหรือ PauliZได้ Measureการดําเนินการส่งResultกลับชนิดที่มีค่าเป็น Zero หรือOne

เมื่อต้องการทําการวัดในพื้นฐานการคํานวณ $\lbrace\ket{0},\ket{1}\rbrace$ คุณยังสามารถใช้การดําเนินการนี้ M ได้อีกด้วย Mการดําเนินการเทียบเท่ากับMeasureการดําเนินการใน Pauli-Z ดังนั้นจึง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;
    }