Apa saja komponen utama program Q#?
Sebelum Anda menulis program kuantum Anda sendiri, penting untuk memahami struktur dan komponen bahasa pemrograman Q#.
Di unit ini, Anda mempelajari tentang komponen dasar program Q#.
Main Operasi
Setiap program Q# harus berisi setidaknya satu operasi. Pengompilasi Q# mulai menjalankan program dari operasi titik masuk, yang secara default adalah operasi Main. Misalnya, program Q# berikut berisi operasi yang disebut Main yang membuat qubit dan mengembalikan pengukuran status qubit:
// This operation is the entry point to your program because it's name is Main
operation Main() : Result {
use q = Qubit();
return M(q);
}
Kode Q# Anda tidak dapat berjalan tanpa operasi titik masuk. Jika Anda ingin menggunakan operasi selain Main sebagai titik masuk, gunakan @EntryPoint() atribut . Misalnya, kode berikut memberi operasi sebelumnya nama yang lebih deskriptif, MeasureOneQubit, dan menentukan operasi tersebut sebagai titik masuk ke program Q# Anda:
// The @EntryPoint() attribute tells the compiler to start running your code from this operation
@EntryPoint()
operation MeasureOneQubit() : Result {
use q = Qubit();
return M(q);
}
Jenis
T# menyediakan banyak jenis data bawaan yang mungkin sudah Anda kenal, seperti Int, , DoubleBool, dan String. Q# juga menyediakan jenis yang khusus untuk komputasi kuantum, seperti Qubit dan Result.
Misalnya, operasi MeasureOneQubit mengembalikan nilai jenis Result. Jenis Result mewakili keadaan qubit ketika diukur, dan dapat memiliki nilai yaitu Zero atau One.
Pustaka kuantum
Q# hadir dengan beberapa pustaka yang berisi fungsi dan operasi untuk membantu Anda menulis program kuantum. Untuk memanggil fungsi atau operasi dari pustaka, gunakan import kata kunci dan tentukan namespace pustaka. Misalnya, untuk menggunakan fungsi Message dari namespace Microsoft.Quantum.Intrinsic di pustaka kuantum standar, gunakan kode berikut:
// 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!");
}
Tanda bintang berarti Anda mengimpor semua fungsi dari Microsoft.Quantum.Intrinsic namespace. Atau, Anda dapat mengimpor hanya fungsi 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!");
}
Nota
Di Q#, jenis Unit berarti bahwa fungsi atau operasi tidak mengembalikan nilai. Untuk informasi selengkapnya tentang jenis pada Q#, lihat Sistem Tipe.
Anda dapat memuat namespace dari pustaka standar dengan Std alih-alih Microsoft.Quantum. Misalnya, kode berikut mengimpor semua fungsi dan operasi dari Microsoft.Quantum.Intrinsic namespace:
// 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!");
}
Untuk menjelajahi pustaka standar Q#, lihat referensi API.
Alokasi kubit
Untuk mengalokasikan qubit di Q#, gunakan use kata kunci dan jenisnya Qubit . Qubit yang Anda alokasikan dengan kata kunci use selalu dimulai dalam keadaan $\ket{0}$.
Anda dapat mengalokasikan satu qubit, atau beberapa qubit dalam array qubit. Berikut adalah contoh yang mengalokasikan satu qubit ke dalam variabel q1 dan array lima qubit ke dalam q5:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Pengukuran kubit
Dalam Q#, Measure operasi melakukan pengukuran bersama dari satu atau beberapa qubit dalam basis Pauli yang ditentukan, yang dapat berupa PauliX, PauliY, atau PauliZ. Operasi Measure mengembalikan jenis Result yang memiliki nilai salah satu dari Zero atau One.
Untuk melakukan pengukuran dalam basis komputasi $\lbrace\ket{0},\ket{1}\rbrace$, Anda juga dapat menggunakan operasi.M Operasi M ini setara dengan Measure operasi secara Pauli-Z, jadi M([qubit]) berperilaku sama persis dengan Measure([PauliZ], [qubit]). Namun, operasi M hanya menerima satu qubit sebagai masukan, bukan array qubit.
Reset kubit
Dalam Q#, qubit harus dalam status $\ket{0}$ untuk melepaskannya. Ketika Anda selesai menggunakan qubit, panggil Reset operasi untuk mengatur ulang qubit ke status $\ket{0}$. Misalnya, kode berikut mengalokasikan qubit, mengukur status qubit, lalu mengatur ulang qubit:
operation Main() : Result {
use q = Qubit();
let result = M(q);
// Reset the qubit so that you can release it
Reset(q);
return result;
}