Systém typů
Vzhledem k tomu, že se zaměřujeme na kvantové algoritmy směrem k tomu, co by se mělo dosáhnout spíše než na reprezentaci problému z hlediska datových struktur, je přirozeným volbou, když vezmeme funkční perspektivu návrhu jazyka. Systém typů je současně výkonným mechanismem, který lze využít k analýze programu a dalším kontrolám kompilace, které usnadňují formulaci robustního kódu.
Obecně platí, že Q# systém typů je poměrně minimalistický, v tom smyslu, že neexistuje explicitní pojem tříd nebo rozhraní, protože jeden se může používat z klasických jazyků, jako je C# nebo Java. Bereme také poněkud pragmatičtější přístup k postupnému pokroku, takže určitá konstrukce ještě není plně integrovaná do systému typů. Příkladem jsou functory, které lze použít ve výrazech, ale zatím nemají reprezentaci v systému typů. Odpovídajícím způsobem nelze je momentálně přiřadit ani předat jako argumenty, podobně jako u parametrizovaných volatelných typů. Očekáváme, že přírůstkový postup rozšíření systému typů bude dokončenější a okamžitě vyrovnáváme potřeby s dlouhodobějšími plány.
Dostupné typy
Všechny typy jsou Q#neměnné.
Typ | Description |
---|---|
Unit |
Představuje jeden typ, jehož jedinou hodnotou je () . |
Int |
Představuje 64bitové celé číslo se sign. Hodnoty se pohybují od -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807. |
BigInt |
Představuje celočíselné hodnoty s libovolnou velikostí. |
Double |
Představuje 64bitové číslo s plovoucí desetinou čárkou s dvojitou přesností. Hodnoty jsou v rozsahu -1,79769313486232e308 až 1,79769313486232e308 i NaN (nikoli číslo). |
Bool |
Představuje logické hodnoty. Možné hodnoty jsou true nebo false . |
String |
Představuje text jako hodnoty , které se skládají z posloupnosti jednotek kódu UTF-16. |
Qubit |
Představuje neprůhlé identifikátor, pomocí kterého je možné řešit virtuální kvantovou paměť.
Hodnoty typu Qubit se vytvářejí prostřednictvím přidělení. |
Result |
Představuje výsledek projektivního měření na eigenspaces kvantového operátoru s eigenvalues ±1. Možné hodnoty jsou Zero nebo One . |
Pauli |
Představuje matici Pauli s jedním qubitem. Možné hodnoty jsou PauliI , , PauliY PauliX nebo PauliZ . |
Range |
Představuje seřazenou sekvenci rovnoměrně rozmístěných Int hodnot.
Hodnoty mohou představovat sekvence ve vzestupném nebo sestupném pořadí. |
Pole | Představuje hodnoty , které každý obsahuje posloupnost hodnot stejného typu. |
Tuple | Představuje hodnoty , které každý obsahuje pevný počet položek různých typů. Řazené kolekce členů obsahující jeden prvek jsou ekvivalentní elementu, který obsahují. |
Typ definovaný uživatelem | Představuje uživatelem definovaný typ skládající se z pojmenovaných a anonymních položek různých typů. Hodnoty se vytvářejí vyvoláním konstruktoru. |
Operace | Představuje ne deterministický volání , které přebírá jeden (pravděpodobně řazený) vstupní argument řazené kolekce členů vrátí jeden (pravděpodobně řazený) výstup. Volání hodnot operací můžou mít vedlejší účinky a výstup se může u každého volání lišit, i když je vyvolán se stejným argumentem. |
Funkce | Představuje deterministický volatelný , který přebírá jeden (pravděpodobně řazený) vstupní argument řazené kolekce členů vrátí jeden (pravděpodobně řazený) výstup. Volání hodnot funkcí nemají vedlejší účinky a výstup bude vždy stejný vzhledem ke stejnému vstupu. |