Q# programının ana bileşenleri nelerdir?
Kendi kuantum programlarınızı yazmadan önce Q# programlama dilinin yapısını ve bileşenlerini anlamanız önemlidir.
Bu ünitede bir Q# programının temel bileşenleri hakkında bilgi edineceksiniz.
İşlem Main
Her Q# programı en az bir işlem içermelidir. Q# derleyicisi, varsayılan olarak Main işlemi olan giriş noktası işleminden bir programı çalıştırmak için başlar. Örneğin, aşağıdaki Q# programı kubit oluşturan ve kubitin durumunun ölçümlerini döndüren adlı Main bir işlem içerir:
// 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# kodunuz giriş noktası işlemi olmadan çalıştırılamaz. Giriş noktanız dışında Main bir işlem kullanmak istiyorsanız özniteliğini @EntryPoint() kullanın. Örneğin, aşağıdaki kod önceki işleme daha açıklayıcı bir ad MeasureOneQubitverir ve bu işlemi Q# programınızın giriş noktası olarak tanımlar:
// The @EntryPoint() attribute tells the compiler to start running your code from this operation
@EntryPoint()
operation MeasureOneQubit() : Result {
use q = Qubit();
return M(q);
}
Türler
Q#, Int, Double, Bool ve String gibi zaten aşina olabileceğiniz birçok yerleşik veri türü sağlar. Q#, Qubit ve Result gibi kuantum bilişimine özgü türler de sağlar.
Örneğin, MeasureOneQubit işlem bir Result tür değeri döndürür. Türü, Result kubit ölçülürken kubitin durumunu temsil eder ve ya da ZeroOnedeğerine sahip olabilir.
Kuantum kitaplıkları
Q#, kuantum programları yazmanıza yardımcı olacak işlevler ve işlemler içeren çeşitli kitaplıklarla birlikte gelir. Kitaplıktan bir işlevi veya işlemi çağırmak için anahtar sözcüğünü import kullanın ve kitaplığın ad alanını belirtin. Örneğin, standart kuantum kitaplığındaki MessageStd.Intrinsic ad alanından işlevini kullanmak için aşağıdaki kodu kullanın:
// 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!");
}
Yıldız işareti, ad alanından tüm işlevleri Std.Intrinsic içeri aktardığınız anlamına gelir. Alternatif olarak, yalnızca Message işlevi içeri aktarabilirsiniz:
// 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!");
}
Uyarı
Q# dilinde, Unit türü işlevin veya işlemin değer döndürmediği anlamına gelir. Q# dilindeki türler hakkında daha fazla bilgi için bkz. Tür Sistemi.
Q# standart kitaplığını keşfetmek için bkz. API başvurusu.
Kubit ayırma
Q# dilinde kubit ayırmak için anahtar sözcüğünü use ve Qubit türünü kullanın. Anahtar sözcüğüyle use ayırdığınız kubitler her zaman $\ket{0}$ durumunda başlar.
Bir kubit dizisinde tek bir kubit veya birden çok kubit ayırabilirsiniz. İşte, tek bir kubitin q1 değişkenine ve beş kubitten oluşan bir dizinin q5 değişkenine ayrıldığı bir örnek:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Kubit ölçümü
Q# dilinde işlemMeasure, belirtilen Pauli tabanlarındaki bir veya daha fazla kubitin , veya PauliXolabilirPauliYPauliZ. İşlem Measure, değeri Result veya Zero olan bir One türü döndürür.
$\lbrace\ket{c0}, \ket{c1}\rbrace$ hesaplama temelinde bir ölçüm gerçekleştirmek için, {0} işlemini de kullanabilirsiniz. İşlem M , Pauli-Z temelindeki işleme eşdeğerdir Measure , bu nedenle M([qubit]) ile tam olarak aynı Measure([PauliZ], [qubit])şekilde davranır. Ancak işlem, M kubit dizilerini değil yalnızca tek kubitleri giriş olarak kabul eder.
Kubitleri sıfırlama
Q# dilinde kubitlerin serbest bırakılabilmesi için $\ket{0}$ durumunda olması gerekir. Kubit kullanmayı bitirdiğinizde, kubiti Reset $\ket{0}$ durumuna sıfırlamak için işlemini çağırın. Örneğin, aşağıdaki kod bir kubit ayırır, kubitin durumunu ölçer ve ardından kubiti sıfırlar:
operation Main() : Result {
use q = Qubit();
let result = M(q);
// Reset the qubit so that you can release it
Reset(q);
return result;
}