Literale

Literal vom Typ „Unit“

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

Der Wert Unit wird häufig als Argument für aufrufbare Komponenten verwendet – entweder, weil keine anderen Argumente übergeben werden müssen, oder um die Ausführung zu verzögern. Er wird auch als Rückgabewert verwendet, wenn kein anderer Wert zurückgegeben werden muss, was bei unitären Vorgängen (also bei Vorgängen, die das Funktionselement Adjoint und/oder das Funktionselement Controlled unterstützen) der Fall ist.

Literale vom Typ „Int“

Wertliterale für den Typ Int können in binärer, oktaler, dezimaler oder hexadezimaler Darstellung ausgedrückt werden. Binär ausgedrückte Literale sind mit dem Präfix 0b versehen. Bei oktaler Darstellung wird 0o und bei hexadezimaler Darstellung 0x verwendet. Für die üblicherweise verwendete Dezimaldarstellung gibt es kein Präfix.

Darstellung Wertliteral
Binary 0b101010
Oktal 0o52
Decimal 42
Hexadezimal 0x2a

Literale vom Typ „BigInt“

Wertliterale für den Typ BigInt sind immer mit dem Postfix L versehen können in binärer, oktaler, dezimaler oder hexadezimaler Darstellung ausgedrückt werden. Binär ausgedrückte Literale sind mit dem Präfix 0b versehen. Bei oktaler Darstellung wird 0o und bei hexadezimaler Darstellung 0x verwendet. Für die üblicherweise verwendete Dezimaldarstellung gibt es kein Präfix.

Darstellung Wertliteral
Binary 0b101010L
Oktal 0o52L
Decimal 42L
Hexadezimal 0x2aL

Literale vom Typ „Double“

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

Darstellung Wertliteral
Standard 0.1973269804
Wissenschaftlich 1.973269804e-1

Wenn nach dem Dezimalpunkt kein Wert mehr folgt, kann die Ziffer nach dem Dezimalpunkt weggelassen werden. 1. ist beispielsweise ein gültiges Literal vom Typ Double und entspricht 1.0.

Literale vom Typ „Bool“

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

Zeichenfolgenliterale

Ein Wertliteral für den Typ String ist eine beliebig lange Sequenz von Unicode-Zeichen, die in doppelte Anführungszeichen eingeschlossen sind. Innerhalb einer Zeichenfolge kann der umgekehrte Schrägstrich (\) als Escapezeichen für ein doppeltes Anführungszeichen verwendet werden. Des Weiteren kann der umgekehrte Schrägstrich zum Einfügen eines Zeilenumbruchs (\n), eines Wagenrücklaufs (\r) oder eines Tabulators (\t) verwendet werden.

Im Anschluss finden Sie Beispiele für gültige Zeichenfolgenliterale:

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

Q# unterstützt auch interpolierte Zeichenfolgen. Eine interpolierte Zeichenfolge ist ein Zeichenfolgenliteral, das eine beliebige Anzahl von Interpolationsausdrücken enthält. Hierbei kann es sich um Ausdrücke beliebiger Typen handeln. Zum Zeitpunkt der Konstruktion werden die Ausdrücke ausgewertet, und ihre String-Darstellung wird an der entsprechenden Position innerhalb des definierten Literals eingefügt. Zur Aktivierung der Interpolation wird das Sonderzeichen $ direkt (ohne Leerzeichen) vor dem ersten Anführungszeichen platziert.

Wenn es sich also beispielsweise bei res um einen Ausdruck handelt, dessen Auswertung 1 ergibt, lautet der zweite Satz im folgenden Literal vom Typ String „The result was 1.“:

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

Literale vom Typ „Qubit“

Da Quantenarbeitsspeicher von der Runtime verwaltet wird, gibt es keine Literale für den Typ Qubit. Werte vom Typ Qubit können somit nur per Zuordnung abgerufen werden.

Werte vom Typ Qubit stellen einen nicht transparenten Bezeichner dar, über den ein Quantenbit (Qubit) adressiert werden kann. Der einzige unterstützte Operator ist der Übereinstimmungsvergleich. Weitere Informationen zum Datentyp Qubit finden Sie unter Qubits.

Literale vom Typ „Result“

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

Werte vom Typ Result stellen das Ergebnis einer binären Quantenmessung dar. Zero gibt eine Projektion auf den Eigenraum +1 an; One gibt eine Projektion auf den Eigenraum -1 an.

Literale vom Typ „Pauli“

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

Werte vom Typ Pauli stellen eine der vier Ein-Qubit-Pauli-Matrizen dar, wobei PauliI die Identität darstellt. Werte vom Typ Pauli werden häufig verwendet, um die Achse für Drehungen sowie die Basis für Messungen anzugeben.

Literale vom Typ „Range“

Wertliterale für den Typ Range sind Ausdrücke im Format start..step..stop, wobei start, step und end Ausdrücke vom Typ Int sind. Wenn die Schrittgröße 1 ist, kann die Angabe weggelassen werden. start..stop ist beispielsweise ein gültiges Literal vom Typ Range und entspricht start..1..stop.

Werte vom Typ Range stellen eine Sequenz von ganzen Zahlen dar, wobei das erste Element in der Sequenz start ist und für die nachfolgenden Elemente jeweils step zum vorherigen Element hinzugefügt wird, bis stop übergeben wird. Bei Werten vom Typ Range sind die Werte an beiden Enden eingeschlossen. Das bedeutet, dass das letzte Element des Bereichs stop ist, wenn die Differenz zwischen start und stop ein Vielfaches von step ist. Ein Bereich kann leer sein – etwa, wenn step positiv und stop < start ist.

Im Anschluss finden Sie Beispiele für gültige Literale vom Typ Range:

  • 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 Kontextbezogene und ausgelassene Ausdrücke.

Arrayliterale

Ein Arrayliteral ist eine Sequenz von 0 oder mehr Ausdrücken, die durch Kommas getrennt und in Klammern []und eingeschlossen sind, [1,2,3]z. B. . Alle Ausdrücke müssen einen allgemeinen Basistyp besitzen. Hierbei handelt es sich um den Elementtyp des Arrays. Wenn ein leeres Array mit []angegeben wird, ist möglicherweise eine Typanmerkung erforderlich, damit der Compiler den geeigneten Typ des Ausdrucks bestimmen kann.

Arrays beliebiger Länge können mithilfe eines Größenarrayausdrucks erstellt werden. Ein solcher Ausdruck hat das Format [expr, size = s], wobei s ein beliebiger Ausdruck des Typs Int sein kann und expr zu einem Wert ausgewertet wird, der die Elemente des Arrays wiederholt s wiederholt. Erstellt beispielsweise [1.2, size = 3] dasselbe Array wie [1.2, 1.2, 1.2].

Literale vom Typ „Tupel“

Ein Literal vom Typ Tupel ist eine Sequenz mit einem oder mehreren Ausdrücken eines beliebigen Typs, die durch Kommas getrennt und in Klammern (( und )) eingeschlossen sind. Der Typ des Tupels enthält die Informationen zu den einzelnen Elementtypen.

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

Tupel, die ein einzelnes Element enthalten, werden im Hinblick auf Typ und Wert auf die gleiche Weise behandelt wie das eigentliche Element. Dies wird als Äquivalenz für Singleton-Tupel bezeichnet.

Tupel werden verwendet, um Werte zu einem einzelnen Wert zu bündeln, was die Weitergabe vereinfacht. Dadurch kann jede aufrufbare Komponente genau eine Eingabe akzeptieren und genau eine Ausgabe zurückgeben.

Literale für benutzerdefinierte Typen

Die Werte eines benutzerdefinierten Typs werden durch Aufrufen des zugehörigen Konstruktors erstellt. Beim Deklarieren des Typs wird automatisch ein Standardkonstruktor generiert. Derzeit ist es nicht möglich, benutzerdefinierte Konstruktoren zu definieren.

Wenn IntPair beispielsweise über zwei Elemente vom Typ Int verfügt, erstellt IntPair(2, 3) durch Aufrufen des Standardkonstruktors eine neue Instanz.

Vorgangs- und Funktionsliterale

Anonyme Vorgänge und Funktionen können mithilfe eines Lambdaausdrucks erstellt werden.