Literaler
Enhetsliteral
Den enda befintliga literalen Unit
för typen är värdet ()
.
Värdet Unit
används ofta som ett argument för anropbara objekt, antingen för att inga andra argument behöver skickas eller för att fördröja körningen. Det används också som returvärde när inget annat värde behöver returneras, vilket är fallet för enhetsåtgärder, d.v.s. åtgärder som stöder Adjoint
och/eller functor.Controlled
Int-literaler
Värdeliteraraler för Int
typen kan uttryckas i binär, oktal, decimal eller hexadecimal representation. Literaler uttryckta i binärt 0b
format har prefixet , med 0o
för oktal och med 0x
för hexadecimalt. Det finns inget prefix för den vanliga decimalrepresentationen.
Representation | Värdeliteral |
---|---|
Binär | 0b101010 |
Oktalt | 0o52 |
Decimal | 42 |
Hexadecimala | 0x2a |
BigInt-literaler
Värdeliteraraler för BigInt
typen postfixeras alltid med L
och kan uttryckas i binär, oktal, decimal eller hexadecimal representation. Literaler uttryckta i binärt 0b
format har prefixet , med 0o
för oktal och med 0x
för hexadecimalt. Det finns inget prefix för den vanliga decimalrepresentationen.
Representation | Värdeliteral |
---|---|
Binär | 0b101010L |
Oktalt | 0o52L |
Decimal | 42L |
Hexadecimala | 0x2aL |
Dubbla literaler
Värdeliteraraler för Double
typen kan uttryckas i standardnotation eller vetenskaplig notation.
Representation | Värdeliteral |
---|---|
Standard | 0.1973269804 |
Vetenskaplig | 1.973269804e-1 |
Om inget följer efter decimaltecknet kan siffran efter decimaltecknet utelämnas. Är till exempel 1.
en giltig Double
literal och samma som 1.0
.
Bool-literaler
Befintliga literaler för Bool
typen är true
och false
.
Strängliteraler
En värdeliteral för String
typen är en godtycklig längdsekvens med Unicode-tecken omgivna av dubbla citattecken.
Inuti en sträng kan snedstreckstecknet \
användas för att undvika ett dubbelt citattecken och för att infoga en ny rad som \n
, en vagnretur som \r
och en flik som \t
.
Följande är exempel på giltiga strängliteraler:
"This is a simple string."
"\"This is a more complex string.\", she said.\n"
Q# stöder också interpolerade strängar.
En interpolerad sträng är en strängliteral som kan innehålla valfritt antal interpolationsuttryck. Dessa uttryck kan vara av godtyckliga typer.
Vid konstruktionen utvärderas uttrycken och deras String
representation infogas på motsvarande plats inom den definierade literalen. Interpolering aktiveras genom att prepending specialtecknet $
direkt före det första citattecknet, utan blanksteg mellan dem.
Om till exempel res
är ett uttryck som utvärderas till 1
visar den andra meningen i följande String
literal "Resultatet var 1":
$"This is an interpolated string. The result was {res}."
Qubit-literaler
Det finns inga literaler för Qubit
typen eftersom kvantminnet hanteras av körningen. Värden av typen Qubit
kan därför bara hämtas via allokering.
Värden av typen Qubit
representerar en täckande identifierare med vilken en kvantbit, eller kvantbit, kan åtgärdas. Den enda operator som de stöder är likhetsjämförelse. Mer information om datatypen finns i Qubit
Qubits.
Resultatliteraraler
Befintliga literaler för Result
typen är Zero
och One
.
Värden av typen Result
representerar resultatet av en binär kvantmätning.
Zero
indikerar en projektion på eigenområdet +1, One
indikerar en projektion på -1-eigenområdet.
Pauli-literaler
Befintliga literaler för Pauli
typen är PauliI
, PauliX
, PauliY
och PauliZ
.
Värden av typen Pauli
representerar en av de fyra pauli-matriserna med en enda qubit, där PauliI
de representerar identiteten.
Värden av typen Pauli
används ofta för att ange axeln för rotationer och för att ange med avseende på vilken grund som ska mätas.
Intervallliteraraler
Värdeliteraraler för Range
typen är uttryck av formatet start..step..stop
, där start
, step
och end
är uttryck av typen Int
. Om stegstorleken är en kan den utelämnas. Är till exempel start..stop
en giltig Range
literal och samma som start..1..stop
.
Värden av typen Range
representerar en sekvens med heltal, där det första elementet i sekvensen är start
, och efterföljande element hämtas genom att lägga step
till det föregående tills det skickas stop
.
Range
värdena är inkluderande i båda ändar, det vill sa att det sista elementet i intervallet är stop
om skillnaden mellan start
och stop
är en multipel av step
.
Ett intervall kan vara tomt om till exempel step
är positivt och stop < start
.
Följande är exempel på giltiga Range
literaler:
-
1..3
är intervallet 1, 2, 3. -
2..2..5
är intervallet 2, 4. -
2..2..6
är intervallet 2, 4, 6. -
6..-2..2
är intervallet 6, 4, 2. -
2..-2..1
är intervallet 2. -
2..1
är det tomma intervallet.
Mer information finns i Sammanhangsbaserade uttryck.
Matrisliteraraler
En matrisliteral är en sekvens med noll eller flera uttryck, avgränsade med kommatecken och omgivna av hakparenteser [
och ]
, till exempel . [1,2,3]
Alla uttryck måste ha en gemensam bastyp, vilket är matrisens objekttyp. Om en tom matris anges med []
kan en typanteckning behövas för att kompilatorn ska kunna fastställa lämplig typ av uttryck.
Matriser med godtycklig längd kan skapas med hjälp av ett storleksmatrisuttryck.
Ett sådant uttryck är av formatet [expr, size = s]
, där s
kan vara valfritt uttryck av typen Int
och expr
utvärderas till ett värde som kommer att vara objekten i matrisen upprepade s
gånger. Skapar till exempel [1.2, size = 3]
samma matris som [1.2, 1.2, 1.2]
.
Tuppelns literaler
En tuppelnliteral är en sekvens av ett eller flera uttryck av valfri typ, avgränsade med kommatecken och omgivna av parenteser (
och )
. Tuppelns typ innehåller information om varje objekttyp.
Värdeliteral | Typ |
---|---|
("Id", 0, 1.) |
(String, Int, Double) |
(PauliX,(3,1)) |
(Pauli, (Int, Int)) |
Tupplar som innehåller ett enskilt objekt behandlas som identiska med själva objektet, både i typ och värde, vilket kallas singleton tuple equivalence.
Tupplar används för att paketera värden i ett enda värde, vilket gör det enklare att skicka runt dem. Detta gör det möjligt för varje anropningsbar att ta exakt en indata och returnera exakt en utdata.
Literaler för användardefinierade typer
Värden av en användardefinierad typ skapas genom att deras konstruktor anropas. En standardkonstruktor genereras automatiskt när typen deklareras. Det går för närvarande inte att definiera anpassade konstruktorer.
Om IntPair
till exempel har två objekt av typen Int
skapar du IntPair(2, 3)
en ny instans genom att anropa standardkonstruktorn.
Drift- och funktionsliteraraler
Anonyma åtgärder och funktioner kan skapas med ett lambda-uttryck.