Dela via


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 0bformat 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 0bformat 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 \roch 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 1visar 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 QubitQubits.

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, PauliYoch 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, stepoch 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 Intskapar 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.