كيف يتم تنظيم برامج Q#؟
تحتوي لغة البرمجة الكمومية Q# على بنية محددة جيدا. في هذه الوحدة، ستراجع المكونات الرئيسية لبرنامج Q#.
مساحة الاسم
يبدأ كل ملف Q# بمساحة اسم. إليك مثال:
namespace HelloQuantum {
// Your code goes here.
}
namespace
يتم استخدام الكلمة الأساسية لتعريف مساحة اسم. تستخدم مساحات الأسماء لتنظيم التعليمات البرمجية ل Q# في وحدات منطقية. يصبح استخدامها مهمًا عند استخدام مكتبات Q# في برامجك وعندما تكتب مكتباتك الخاصة.
المكتبات
تحتوي مكتبات Q# على وظائف وعمليات يمكنك استخدامها في البرامج الكمومية. عند استدعاء دالة أو عملية من مكتبة، يمكنك استخدام open
التوجيه وتحديد مساحة اسم المكتبة. على سبيل المثال:
namespace HelloQuantum {
open Microsoft.Quantum.Intrinsic;
@EntryPoint()
operation HelloQ() : Unit {
Message("Hello quantum world!");
}
}
في هذا المثال، open
يخبر التوجيه المحول البرمجي Q# بالبحث عن Message
العملية في Microsoft.Quantum.Intrinsic
مساحة الاسم.
نقاط الدخول
EntryPoint
يخبر المحول البرمجي Q# بمكان بدء تنفيذ البرنامج. يجب أن يكون لكل برنامج Q# نقطة إدخال واحدة على الأقل متبوعة بعملية.
تخصيص البتات الكمومية
في Q#، للحصول على qubit، يمكنك استخدام use
الكلمة الأساسية . يبدأ كل qubit تقوم بتخصيصه use
مع الكلمة الأساسية في حالة |0〉.
يمكنك تخصيص واحد أو عديد من البتات الكمومية في وقت واحد. فيما يلي مثال يخصص qubits واحد وخمسة:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
العمليات الكمومية
تعتبر العمليات هي اللبنات الأساسية لبرنامج Q#. عملية Q# هي روتين فرعي كمومي. أي أنه روتين قابل للاستدعاء ويحتوي على عمليات كمومية تعدل حالة سجل البت الكمومي.
لتعريف عملية Q#، يمكنك تحديد اسم للعملية مع الإدخالات والإخراج المتعلقين. وفيما يلي مثال أساسي:
@EntryPoint()
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
هنا، SayHelloQ
هو اسم العملية. لا تأخذ أي وسيطات كنوع Unit
الإدخال والإرجاع، مما يعني أن العملية لا ترجع أي معلومات.
كما توفر مكتبات Q# عمليات يمكنك استخدامها في البرامج. إحدى العمليات التي ستستخدمها H
لاحقا هي العملية. بالنظر إلى البت الكمومي على أساس Z، H
تضع العملية البت الكمومي في تراكب زوجي . بمجرد التراكب، فإن البت الكمومي لديه فرصة 50٪ لقياسه على أنه صفر أو واحد.
الأنواع
يوفر Q# العديد من الأنواع المضمنة التي تعرفها بالفعل، بما في ذلك Int
و Bool
Double
و و String
بالإضافة إلى الأنواع الخاصة بالحوسبة الكمومية. يوفر Q# أيضًا أنواع تعريف النطاقات والصفائف والمجموعات. يمكنك حتى تعريف أنواع مخصصة لديك.
في هذه الوحدة النمطية Result
، ستعمل مع النوع . Result
يمثل نتيجة قياس البت الكمومي ويمكن أن يكون له إحدى القيمتين المحتملتين: One
وZero
.
قياس البتات الكمومية
في Q#، يتم إجراء قياسات باولي عن طريق تطبيق Measure
العملية، والتي تقوم بإجراء قياس مشترك لواحد أو أكثر من البتات الكمومية في قواعد بولي المحددة. تقوم Measure
العملية بإرجاع Result
نوع، أي إما One
أو Zero
.
إشعار
إذا كان الصفيف الأساس وصفيف qubit أطوال مختلفة، فستفشل Measure
العملية.
لتنفيذ قياس على الأساس الحسابي {|0〉 ,|1〉} يمكنك أيضا استخدام M
العملية التي تقوم بقياس كيوبت واحد على أساس باولي Z. لذلك فإن M
العملية تعادل تطبيق Measure([PauliZ], [qubit])
.
مثال بسيط هو البرنامج التالي، الذي يخصص كيوبت واحد في حالة |0، ثم يطبق عملية H
Hadamard عليه ويقيس النتيجة في PauliZ
الأساس.
@EntryPoint()
operation MeasureOneQubit() : Result {
// Allocate a qubit, by default it is in zero state
use q = Qubit();
// We apply a Hadamard operation H to the state
// It now has a 50% chance of being measured 0 or 1
H(q);
// Now we measure the qubit in Z-basis.
let result = M(q);
// Reset the qubit so it can be safely released.
Reset(qubit);
return result;
}
إشعار
Reset
يتم استخدام العملية لإعادة تعيين qubit إلى الحالة |0〉. في Q#، يجب أن تكون qubits في حالة |0〉 بحلول وقت إصدارها.