Rendszer beírása

Mivel a kvantumalgoritmus inkább az elvégzendő célokra összpontosít, mint az adatstruktúrák problémamegjelenítésére, természetes választás a nyelvtervezés funkcionálisabb szempontjainak figyelembe vétele. Ugyanakkor a típusrendszer egy hatékony mechanizmus, amely felhasználható a programelemzéshez és más fordítási időre vonatkozó ellenőrzésekhez, amelyek megkönnyítik a hatékony kód kialakítását.

Mindent egybevetve, a Q# típusrendszer meglehetősen minimalista, abban az értelemben, hogy nincs explicit fogalma osztályok vagy felületek, mint az egyik lehet használni a klasszikus nyelvek, mint a C# vagy a Java. Némi pragmatikus megközelítést is alkalmazunk, amely növekményes előrehaladást tesz lehetővé, így bizonyos szerkezetek még nincsenek teljesen integrálva a típusrendszerbe. Ilyenek például a funktorok, amelyek használhatók kifejezésekben, de még nem rendelkeznek reprezentációval a típusrendszerben. Ennek megfelelően jelenleg nem rendelhetők hozzá és nem adhatóak át argumentumként, hasonlóan ahhoz, mint a paraméteres hívható típus esetében. Várhatóan növekményes előrehaladást értünk el a típusrendszer teljesebb körű kiterjesztésében, és kiegyensúlyozzuk az azonnali igényeket a hosszabb távú tervekkel.

Elérhető típusok

Minden típus Q#nem módosítható.

Típus Leírás
Unit Egyetlen olyan típust jelöl, amelynek az egyetlen értéke .()
Int 64 bites aláírt egész számot jelöl. Az értékek -9 223 372 036 854 775 808 és 9 223 372 036 854 775 807 között mozognak.
BigInt Tetszőleges méretű aláírt egész számértékeket jelöl.
Double Dupla pontosságú, 64 bites lebegőpontos számot jelöl. Az értékek -1,79769313486232e308 és 1,79769313486232e308 között, valamint NaN (nem szám).
Bool Logikai értékeket jelöl. A lehetséges értékek: true és false.
String A szöveget UTF-16 kódegységek sorozatából álló értékekként jelöli.
Qubit Egy átlátszatlan azonosítót jelöl, amellyel a virtuális kvantummemória kezelhető. A típusértékekQubit példányosítása foglalással történhet.
Result Egy eigenvalues ±1 jellel rendelkező kvantumoperátor eigentereibe történő kivetítő mérés eredményét jelöli. Lehetséges értékek vagy ZeroOne.
Pauli Egy qubites Pauli-mátrixot jelöl. A lehetséges értékek a következők: PauliI, PauliXvagy PauliYPauliZ.
Range Egyenlő távolságú Int értékek rendezett sorozatát jelöli. Az értékek növekvő vagy csökkenő sorrendben jelölhetik a sorozatokat.
Tömb Azokat az értékeket jelöli, amelyek mindegyike azonos típusú értéksorozatot tartalmaz.
Rekord Azokat az értékeket jelöli, amelyek mindegyike rögzített számú különböző típusú elemet tartalmaz. Az egyetlen elemet tartalmazó tuplesek egyenértékűek az általuk tartalmazott elemmel.
Felhasználó által megadott típus Egy felhasználó által definiált típust jelöl, amely különböző típusú névvel ellátott és névtelen elemekből áll. Az értékeket a konstruktor meghívásával példányosítjuk.
Művelet Egy nem determinisztikus meghívható értéket jelöl, amely egy (esetleg rekordértékű) bemeneti argumentumot ad vissza egy (esetleg rekordértékű) kimenettel. A műveletértékek hívásainak mellékhatásai lehetnek, és a kimenet minden hívásnál eltérő lehet, még akkor is, ha ugyanazzal az argumentummal hívják meg.
Függvény Egy determinisztikus hívható értéket jelöl, amely egy (esetleg rekordértékű) bemeneti argumentumot vesz igénybe, és egy (esetleg rekordértékű) kimenetet ad vissza. A függvényértékek meghívásának nincsenek mellékhatásai, és a kimenet mindig ugyanaz lesz, ha ugyanazt a bemenetet adja meg.