Mik a Q#-programok fő összetevői?

Befejeződött

Mielőtt saját kvantumprogramokat ír, fontos tisztában lenni a Q# programozási nyelv szerkezetével és összetevőivel.

Ebben a leckében megismerheti egy Q#-program alapvető összetevőit.

A Main művelet

Minden Q#-programnak legalább egy műveletet tartalmaznia kell. A Q#-fordító a belépési pontként meghatározott műveletből kezdi meg a program futtatását, amely alapértelmezés szerint a Main művelet. A következő Q#-program például tartalmaz egy qubitet létrehozó és a qubit állapotának mérésére szolgáló Main műveletet:

// This operation is the entry point to your program because it's name is Main
operation Main() : Result {
    use q = Qubit();
    return M(q);
}

A Q#-kód nem futtatható belépésipont-művelet nélkül. Ha a belépési ponttól eltérő Main műveletet szeretne használni, használja az @EntryPoint() attribútumot. Az alábbi kód például leíróbb nevet ad az előző műveletnek, MeasureOneQubités a Q#-program belépési pontjaként definiálja a műveletet:

// 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ípusok

A Q# számos olyan beépített adattípust biztosít, amelyeket már ismerhet, például Int, Double, Boolés String. A Q# olyan típusokat is biztosít, amelyek a kvantum-számítástechnikára jellemzőek, például Qubit és Result.

A művelet például MeasureOneQubit egy típusértéket Result ad vissza. A Result típus egy qubit állapotát jelöli, amikor a qubitet megmérik, és értéke lehet akár Zero, vagy One.

Kvantumkódtárak

A Q# számos olyan kódtárat tartalmaz, amelyek függvényeket és műveleteket tartalmaznak a kvantumprogramok írásához. Ha függvényt vagy műveletet szeretne meghívni egy tárból, használja a import kulcsszót, és adja meg az erőforrástár névterét. Ha például a függvényt a MessageStd.Intrinsic standard kvantumtár névteréből szeretné használni, használja a következő kódot:

// 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!");
}

A csillag azt jelenti, hogy az összes függvényt importálja a Std.Intrinsic névtérből. Másik lehetőségként csak a Message függvényt importálhatja:

// 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!");
}

Megjegyzés:

A Q#-ban a Unit típus azt jelenti, hogy a függvény vagy művelet nem ad vissza értéket. A Q#-típusokról további információt a Type System (Típusrendszer) című témakörben talál.

A Q# standard kódtárának megismeréséhez tekintse meg az API-referenciát.

Qubit-kiosztás

Qubit Q#-ban való lefoglalásához használja a kulcsszót use és a típust Qubit . A use kulcsszóval lefoglalt qubitek mindig $\ket{0}$ állapotban kezdődnek.

Egyetlen qubitet vagy több qubitet is lefoglalhat egy qubittömbben. Íme egy példa, amely egyetlen qubitet foglal le a változóban q1 , és egy öt qubitből álló tömböt a következőben q5:

use q1 = Qubit();  // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits

Qubitmérés

A Q#-ban a Measure művelet egy vagy több qubit közös mérését hajtja végre a megadott Pauli-bázisokon, amelyek lehetnek PauliX, PauliYvagy PauliZ. A Measure művelet olyan típus Result értéket ad vissza, amelynek értéke lehet vagy Zero, vagy One.

A $\lbrace\ket{0}, \ket{1}\rbrace$ számítási bázisban történő mérés elvégzéséhez a M műveletet is használhatja. A M művelet egyenértékű az Measure Pauli-Z alapján végzett művelettel, ezért M([qubit]) pontosan ugyanúgy viselkedik, mint Measure([PauliZ], [qubit])a . A M művelet azonban csak egyetlen qubitet fogad el bemenetként, qubittömböket nem.

Qubitek alaphelyzetbe állítása

A Q#-ban a qubiteknek $\ket{0}$ állapotban kell lenniük a kiadásukhoz. Amikor befejezi a qubit használatát, hívja meg a Reset műveletet, hogy a qubitet a $\ket{0}$ állapotba állítsa. A következő kód például leküld egy qubitet, méri a qubit állapotát, majd alaphelyzetbe állítja a qubitet:

operation Main() : Result {
    use q = Qubit();
    let result = M(q);

    // Reset the qubit so that you can release it
    Reset(q);

    return result;
    }