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 \r
a 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
, PauliY
a 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
, step
a 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 start
a další prvky jsou získány přidáním step
k předchozímu prvku, dokud stop
nebude předán.
Range
Hodnoty 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.