Freigeben über


Literale

Literaleinheit

Das einzige vorhandene Literal für den Unit Typ ist der Wert ().

Der Unit-Wert wird häufig als Argument für aufrufbare Werte verwendet, entweder weil keine anderen Argumente übergeben oder die Ausführung verzögert werden müssen. Sie wird auch als Rückgabewert verwendet, wenn kein anderer Wert zurückgegeben werden muss, d. h. bei Einheitenvorgängen, d. h. Vorgängen, die den Adjoint und/oder den Controlled Functor unterstützen.

Int-Literale

Wertliterale für den Int Typ können in binärer, oktaler, dezimaler oder hexadezimaler Darstellung ausgedrückt werden. Literale, die in binär ausgedrückt werden, werden mit 0b, mit 0o für oktal und mit 0x für Hexadezimalzahl präfixiert. Für die häufig verwendete Dezimaldarstellung gibt es kein Präfix.

Repräsentation Wertliteral
Binär 0b101010
Oktal 0o52
Decimal 42
Hexadezimal 0x2a

BigInt Literale

Wertliterale für den BigInt Typ werden immer mit L postfixiert und können in binärer, oktaler, dezimaler oder hexadezimaler Darstellung ausgedrückt werden. Literale, die in binär ausgedrückt werden, werden mit 0b, mit 0o für oktal und mit 0x für Hexadezimalzahl präfixiert. Für die häufig verwendete Dezimaldarstellung gibt es kein Präfix.

Repräsentation Wertliteral
Binär 0b101010L
Oktal 0o52L
Decimal 42L
Hexadezimal 0x2aL

Doppelte Literale

Wertliterale für den Double Typ können in standard- oder wissenschaftlicher Schreibweise ausgedrückt werden.

Repräsentation Wertliteral
Norm 0.1973269804
Wissenschaftlich 1.973269804e-1

Wenn nach dem Dezimalkomma nichts folgt, kann die Ziffer nach dem Dezimalkomma weggelassen werden. Beispielsweise ist 1. ein gültiges Double Literal und identisch mit 1.0.

Boolliterale

Vorhandene Literale für den Bool Typ sind true und false.

Zeichenfolgenliterale

Ein Wertliteral für den String Typ ist eine beliebige Längenfolge von Unicode-Zeichen, die in doppelte Anführungszeichen eingeschlossen sind. Innerhalb einer Zeichenfolge kann das schräge Zeichen \ verwendet werden, um ein doppeltes Anführungszeichen zu escapen und eine neue Zeile als \n, einen Wagenrücklauf als \rund eine Registerkarte als \teinzufügen.

Im Folgenden sind Beispiele für gültige Zeichenfolgenliterale aufgeführt:

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

Q# unterstützt auch interpolierten Zeichenfolgen. Eine interpolierte Zeichenfolge ist ein Zeichenfolgenliteral, das eine beliebige Anzahl von Interpolationsausdrücken enthalten kann. Diese Ausdrücke können beliebige Typen sein. Bei der Konstruktion werden die Ausdrücke ausgewertet, und ihre String Darstellung wird an der entsprechenden Position innerhalb des definierten Literals eingefügt. Die Interpolation wird aktiviert, indem das Sonderzeichen vor $ direkt vor dem ursprünglichen Anführungszeichen ohne Leerzeichen dazwischen steht.

Wenn res beispielsweise ein Ausdruck ist, der zu 1ausgewertet wird, zeigt der zweite Satz im folgenden String Literal "Das Ergebnis war 1":

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

Qubit-Literale

Es gibt keine Literale für den Qubit Typ, vorhanden sind, da der Quantenspeicher von der Laufzeit verwaltet wird. Werte vom Typ Qubit können daher nur über Zuordnungabgerufen werden.

Werte vom Typ Qubit stellen einen undurchsichtigen Bezeichner dar, mit dem ein Quantenbit oder Qubit-adressiert werden kann. Der einzige von ihnen unterstützten Operator ist Gleichheitsvergleich. Weitere Informationen zum datentyp Qubit finden Sie unter Qubits.

Ergebnisliterale

Vorhandene Literale für den Result Typ sind Zero und One.

Werte vom Typ Result das Ergebnis einer binären Quantenmessung darstellen. Zero gibt eine Projektion auf das +1 Eigenspace an, One eine Projektion auf das -1 Eigenspace angibt.

Pauli Literale

Vorhandene Literale für den Pauli Typ sind PauliI, PauliX, PauliYund PauliZ.

Werte vom Typ Pauli stellen eine der vier Einzel-Qubit-Pauli-Matrizendar, wobei PauliI die Identität darstellt. Werte vom Typ Pauli werden häufig verwendet, um die Achse für Drehungen anzugeben und anzugeben, welche Basis gemessen werden soll.

Bereichsliterale

Wertliterale für den Range Typ sind Ausdrücke des Formulars start..step..stop, wobei start, stepund end Ausdrücke vom Typ Intsind. Wenn die Schrittgröße eins ist, wird sie möglicherweise weggelassen. Beispielsweise ist start..stop ein gültiges Range Literal und identisch mit start..1..stop.

Werte vom Typ Range eine Abfolge ganzzahliger Zahlen darstellen, wobei das erste Element in der Sequenz startist und nachfolgende Elemente abgerufen werden, indem step zum vorherigen hinzugefügt werden, bis stop übergeben wird. Range Werte sind an beiden Enden einschließlich, d. h., das letzte Element des Bereichs ist stop, wenn der Unterschied zwischen start und stop ein Vielfaches von stepist. Ein Bereich kann leer sein, wenn z. B. step positiv und stop < startist.

Im Folgenden sind Beispiele für gültige Range Literale aufgeführt:

  • 1..3 ist der Bereich 1, 2, 3.
  • 2..2..5 ist der Bereich 2, 4.
  • 2..2..6 ist der Bereich 2, 4, 6.
  • 6..-2..2 ist der Bereich 6, 4, 2.
  • 2..-2..1 ist der Bereich 2.
  • 2..1 ist der leere Bereich.

Weitere Informationen finden Sie unter Kontextausdrücke.

Arrayliterale

Ein Array Literal ist eine Sequenz von null oder mehr Ausdrücken, getrennt durch Kommas und in Klammern [ und ]eingeschlossen; beispiel: [1,2,3]. Alle Ausdrücke müssen einen allgemeinen Basistypaufweisen, bei dem es sich um den Elementtyp des Arrays handelt. Wenn ein leeres Array mit []angegeben wird, kann für den Compiler eine Typanmerkung erforderlich sein, um den entsprechenden Typ des Ausdrucks zu ermitteln.

Arrays mit beliebiger Länge können mithilfe eines Arrayausdrucks erstellt werden. Ein solcher Ausdruck ist das Formular [expr, size = s], wobei s ein beliebiger Ausdruck vom Typ Int sein kann und expr auf einen Wert ausgewertet wird, der die Elemente des Arrays wiederholt s Mal darstellt. Beispielsweise erstellt [1.2, size = 3] dasselbe Array wie [1.2, 1.2, 1.2].

Tupelliterale

Ein Tupel Literal ist eine Abfolge eines oder mehrerer Ausdrücke eines beliebigen Typs, getrennt durch Kommas und in Klammern ( und )eingeschlossen. Der Typ des Tupels enthält die Informationen zu den einzelnen Elementtypen.

Wertliteral Typ
("Id", 0, 1.) (String, Int, Double)
(PauliX,(3,1)) (Pauli, (Int, Int))

Tupel, die ein einzelnes Element enthalten, werden als identisch mit dem Element selbst behandelt, sowohl im Typ als auch im Wert, der Singleton-Tupel-Äquivalenzgenannt wird.

Tupel werden verwendet, um Werte in einem einzelnen Wert zu bündeln, sodass sie einfacher umbrochen werden können. Dadurch ist es für jeden Aufruf möglich, genau eine Eingabe zu übernehmen und genau eine Ausgabe zurückzugeben.

Literale für Strukturtypen

Werte eines Strukturtyps werden zugewiesen, wenn Sie eine neue Instanz erstellen, entweder mithilfe der new-Anweisung oder des vom Compiler erstellten Konstruktors.

Wenn IntPair z. B. ein struct definiert ist

struct IntPair {
    num1 : Int,
    num2 : Int,    
}

anschließend erstellen Sie eine neue Instanz und weisen Werte mithilfe von

let MyPair = new IntPair { num1 = 5, num2 = 7 };

oder

let MyPair = IntPair(5, 7);

Vorgangs- und Funktionsliterale

Anonyme Vorgänge und Funktionen können mithilfe eines Lambda-Ausdruckserstellt werden.