Literály

Jednotkový literál

Jediný existující literál pro typUnit je hodnota ().

Hodnota se Unit běžně používá jako argument pro volatelné položky, protože není nutné předávat žádné jiné argumenty, nebo kvůli zpoždění provádění. Používá se také jako návratová hodnota, když není potřeba vracet žádnou jinou hodnotu, což je případ pro unitární operace, tj. operace, které podporují Adjoint a/nebo Controlled funktor.

Int literály

Literály hodnot pro Int typ mohou být vyjádřeny v binární, osmičkové, desítkové nebo šestnáctkové reprezentaci. Literály vyjádřené v binárním formátu mají předponu 0b, osmičkové 0o a 0x hexadecimální. Pro běžně používané desítkové vyjádření neexistuje žádná předpona.

Reprezentace Literál hodnoty
Binární 0b101010
Osmičkové 0o52
Decimal 42
Šestnáctková hodnota 0x2a

Literály BigInt

Literály hodnot pro BigInt typ jsou vždy příponou L a mohou být vyjádřeny v binární, osmičkové, desítkové nebo šestnáctkové reprezentaci. Literály vyjádřené v binárním formátu mají předponu 0b, osmičkové 0o a 0x hexadecimální. Pro běžně používané desítkové vyjádření neexistuje žádná předpona.

Reprezentace Literál hodnoty
Binární 0b101010L
Osmičkové 0o52L
Decimal 42L
Šestnáctková hodnota 0x2aL

Dvojité literály

Literály hodnot pro Double typ mohou být vyjádřeny standardním nebo vědeckým zápisem.

Reprezentace Literál hodnoty
Standard 0.1973269804
Vědecký 1.973269804e-1

Pokud za desetinnou čárkou nic následuje, může být číslice za desetinnou čárkou vynechána. Například 1. je platný Double literál a stejný jako 1.0.

Logické literály

Existující literály pro typBool jsou true a false.

Řetězcové literály

Literál hodnoty proString typ je posloupnost libovolné délky znaků Unicode uzavřená v dvojitých uvozovkách. Uvnitř řetězce lze znak zpětného lomítka \ použít k řídicímu znaku dvojité uvozovky a k vložení nového řádku jako \n, znak návratu na začátek řádku jako \ra tabulátoru jako \t.

Tady jsou příklady platných řetězcových literálů:

"This is a simple string."
"\"This is a more complex string.\", she said.\n"

Q# podporuje také interpolované řetězce. Interpolovaný řetězec je řetězcový literál, který může obsahovat libovolný počet interpolačních výrazů. Tyto výrazy můžou být libovolného typu. Při konstrukci se výrazy vyhodnotí a jejich String reprezentace se vloží na odpovídající místo v rámci definovaného literálu. Interpolace je povolena před vložením speciálního znaku $ přímo před počáteční uvozovku bez mezer mezi nimi.

Pokud res je například výraz, který se vyhodnotí jako 1, zobrazí druhá věta v následujícím String literálu "Výsledek byl 1":

$"This is an interpolated string. The result was {res}."

Literály qubitů

Neexistují žádné literály pro tentoQubit typ, protože kvantovou paměť spravuje modul runtime. Hodnoty typu Qubit lze získat pouze přidělením.

Hodnoty typu Qubit představují neprůžný identifikátor, pomocí kterého lze kvantový bit ( qubit) adresovat. Jediný operátor, který podporují, je porovnání rovnosti. Další informace o datovém typu najdete v Qubit tématu Qubity.

Literály výsledků

Existující literály pro typResult jsou Zero a One.

Hodnoty typu Result představují výsledek binárního kvantového měření. Zero označuje projekci na +1 předaný prostor, One indikuje projekci na -1 předaný prostor.

Pauli literály

Existující literály pro typPauli jsou PauliI, PauliX, PauliYa PauliZ.

Hodnoty typu Pauli představují jednu ze čtyř matic Pauliho s jedním qubitem PauliI a představují identitu. Hodnoty typu Pauli se běžně používají k označení osy pro otáčení a k určení toho, který základ se má měřit.

Literály rozsahu

Literály hodnot pro Range typ jsou výrazy ve tvaru start..step..stop, kde start, stepa end jsou výrazy typu Int. Pokud je velikost kroku jedna, může být vynechána. Například start..stop je platný Range literál a stejný jako start..1..stop.

Hodnoty typu Range představují sekvenci celých čísel, kde první prvek v sekvenci je starta další prvky jsou získány přidáním step k předchozímu prvku, dokud stop nebude předán. RangeHodnoty jsou inkluzivní na obou koncích, to znamená, že poslední prvek rozsahu jestop, pokud je rozdíl mezi start a stop násobek .step Rozsah může být prázdný, pokud je například step kladný a stop < start.

Tady jsou příklady platných Range literálů:

  • 1..3 je rozsah 1, 2, 3.
  • 2..2..5 je rozsah 2, 4.
  • 2..2..6 je rozsah 2, 4, 6.
  • 6..-2..2 je rozsah 6, 4, 2.
  • 2..-2..1 je rozsah 2.
  • 2..1 je prázdný rozsah.

Další informace najdete v tématu Kontextové výrazy.

Literály pole

Literál pole je posloupnost nulových nebo více výrazů oddělených čárkami a uzavřených v hranatých závorkách [ a ], například [1,2,3]. Všechny výrazy musí mít společný základní typ, což je typ položky pole. Pokud je zadána prázdná matice pomocí [], může být pro kompilátor potřeba poznámka typu, aby mohl určit odpovídající typ výrazu.

Pole libovolné délky mohou být vytvořena pomocí výrazu typu sized-array. Takový výraz je ve tvaru [expr, size = s], kde s může být libovolný výraz typu Int a expr je vyhodnocen na hodnotu, která bude položkami pole opakovaných s časů. Například [1.2, size = 3] vytvoří stejné pole jako [1.2, 1.2, 1.2].

Literály řazené kolekce členů

Literál řazené kolekce členů je posloupnost jednoho nebo více výrazů libovolného typu oddělených čárkami a uzavřených v závorkách ( a ). Typ řazené kolekce členů obsahuje informace o jednotlivých typech položek.

Literál hodnoty Typ
("Id", 0, 1.) (String, Int, Double)
(PauliX,(3,1)) (Pauli, (Int, Int))

Řazené kolekce členů obsahující jednu položku jsou považovány za identické se samotnou položkou, a to jak typem, tak i hodnotou, což se označuje jako ekvivalence řazené kolekce členů typu singleton.

Řazené kolekce členů slouží k seskupení hodnot do jedné hodnoty, což usnadňuje jejich předávání. Díky tomu může každý volatelný vstup přijmout přesně jeden vstup a vrátit přesně jeden výstup.

Literály pro uživatelsky definované typy

Hodnoty uživatelem definovaného typu jsou vytvořeny vyvoláním jejich konstruktoru. Při deklarování typu se automaticky vygeneruje výchozí konstruktor. V současné době není možné definovat vlastní konstruktory.

Pokud IntPair například obsahuje dvě položky typu Int, vytvoří IntPair(2, 3) novou instanci vyvoláním výchozího konstruktoru.

Literály operací a funkcí

Anonymní operace a funkce je možné vytvořit pomocí výrazu lambda.