Udostępnij za pośrednictwem


Literały

Literał jednostki

Jedynym istniejącym literałem dlaUnit typu jest wartość ().

Wartość Unit jest często używana jako argument do wywołań, ponieważ nie trzeba przekazywać żadnych innych argumentów lub opóźniać wykonywanie. Jest ona również używana jako wartość zwracana, gdy nie trzeba zwracać żadnej innej wartości, czyli w przypadku operacji jednostkowych, czyli operacji Adjoint obsługujących element i/lub Controlled functor.

Literały int

Literały wartości dla Int typu mogą być wyrażone w reprezentacji binarnej, ósemkowej, dziesiętnej lub szesnastkowej. Literały wyrażone w pliku binarnym są poprzedzone znakiem , z 0o wartością 0bósemkową i wartością 0x szesnastkowa. Nie ma prefiksu dla często używanej reprezentacji dziesiętnej.

Reprezentacja Literał wartości
Binarne 0b101010
Ósemkową 0o52
Liczba dziesiętna 42
Wartość szesnastkowa 0x2a

Literały BigInt

Literały wartości dlaBigInt typu są zawsze postfiksowane i L mogą być wyrażone w reprezentacjach binarnych, ósemkowych, dziesiętnych lub szesnastkowych. Literały wyrażone w pliku binarnym są poprzedzone znakiem , z 0o wartością 0bósemkową i wartością 0x szesnastkowa. Nie ma prefiksu dla często używanej reprezentacji dziesiętnej.

Reprezentacja Literał wartości
Binarne 0b101010L
Ósemkową 0o52L
Liczba dziesiętna 42L
Wartość szesnastkowa 0x2aL

Podwójne literały

Literały wartości dla Double typu mogą być wyrażone w notacji standardowej lub naukowej.

Reprezentacja Literał wartości
Standardowa (Standard) 0.1973269804
Naukowe 1.973269804e-1

Jeśli nic nie następuje po punkcie dziesiętnym, cyfra po przecinku dziesiętnym może zostać pominięta. Na przykład 1. jest prawidłowym Double literałem i taki sam jak 1.0.

Literały logiczne

Istniejące literały dlaBool typu to true i false.

Literały ciągu

Literał wartości dla String typu to dowolna sekwencja długości znaków Unicode ujęta w cudzysłowy. Wewnątrz ciągu znak ukośnika \ odwrotnego może służyć do ucieczki znaku podwójnego cudzysłowu i wstawienia nowego wiersza jako , powrotu karetki jako \r\ni karty jako \t.

Poniżej przedstawiono przykłady prawidłowych literałów ciągu:

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

Q# obsługuje również ciągi interpolowane. Ciąg interpolowany to literał ciągu, który może zawierać dowolną liczbę wyrażeń interpolacji. Te wyrażenia mogą być dowolnymi typami. Podczas budowy wyrażenia są oceniane, a ich String reprezentacja jest wstawiana w odpowiedniej lokalizacji w zdefiniowanym literału. Interpolacja jest włączona przez dodanie znaku $ specjalnego bezpośrednio przed początkowym cudzysłowem bez odstępu między nimi.

Jeśli na przykład res jest wyrażeniem, które daje wartość 1, drugie zdanie w poniższym String literału wyświetla wartość "Wynik był 1".:

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

Literały kubitu

Nie istnieją literały typuQubit, ponieważ pamięć kwantowa jest zarządzana przez środowisko uruchomieniowe. W związku z tym wartości typu Qubit można uzyskać tylko za pośrednictwem alokacji.

Wartości typu Qubit reprezentują nieprzezroczysty identyfikator, za pomocą którego można rozwiązać bit kwantowy lub kubit. Jedynym operatorem, który obsługuje, jest porównanie równości. Aby uzyskać więcej informacji na Qubit temat typu danych, zobacz Kubity.

Literały wyników

Istniejące literały dlaResult typu to Zero i One.

Wartości typu Result reprezentują wynik binarnej miary kwantowej. Zero wskazuje projekcję na +1 eigenspace, One wskazuje projekcję na -1 eigenspace.

Literały Pauli

Istniejące literały dlaPauli typu to PauliI, PauliX, PauliYi PauliZ.

Wartości typu Pauli reprezentują jedną z czterech macierzy Pauli z jednym kubitem, reprezentującą PauliI tożsamość. Wartości typu Pauli są często używane do oznaczania osi dla rotacji i określania w odniesieniu do której podstawy do zmierzenia.

Literały zakresu

Literały wartości dla Range typu to wyrażenia formularza start..step..stop, gdzie start, stepi end są wyrażeniami typu Int. Jeśli rozmiar kroku jest jeden, może zostać pominięty. Na przykład start..stop jest prawidłowym Range literałem i taki sam jak start..1..stop.

Wartości typu Range reprezentują sekwencję liczb całkowitych, gdzie pierwszy element w sekwencji to start, a kolejne elementy są uzyskiwane przez dodanie step do poprzedniego, dopóki stop nie zostanie przekazane. Range wartości są inkluzywne na obu końcach, czyli ostatnim elementem zakresu jest, stop jeśli różnica między start i stop jest wielokrotną stepwartością . Zakres może być pusty, jeśli na przykład step jest dodatni i stop < start.

Poniżej przedstawiono przykłady prawidłowych Range literałów:

  • 1..3 to zakres 1, 2, 3.
  • 2..2..5 jest zakresem 2, 4.
  • 2..2..6 jest zakresem 2, 4, 6.
  • 6..-2..2 to zakres 6, 4, 2.
  • 2..-2..1 jest zakresem 2.
  • 2..1 jest pustym zakresem.

Aby uzyskać więcej informacji, zobacz Wyrażenia kontekstowe.

Literały tablicy

Literał tablicy to sekwencja zera lub większej liczby wyrażeń oddzielona przecinkami i ujęta w nawiasy [ , na ]przykład [1,2,3]. Wszystkie wyrażenia muszą mieć wspólny typ podstawowy, który jest typem elementu tablicy. Jeśli pusta tablica jest określona za pomocą []metody , może być wymagana adnotacja typu dla kompilatora w celu określenia odpowiedniego typu wyrażenia.

Tablice o dowolnej długości można utworzyć przy użyciu wyrażenia wielkości tablicy. Takie wyrażenie ma postać [expr, size = s], gdzie s może być dowolne wyrażenie typu Int i expr jest obliczane na wartość, która będzie elementami tablicy powtarzanych s razy. Na przykład [1.2, size = 3] tworzy tę samą tablicę co [1.2, 1.2, 1.2].

Literały krotki

Literał krotki to sekwencja co najmniej jednego wyrażenia dowolnego typu oddzielona przecinkami i ujęta w nawiasy ( i ). Typ krotki zawiera informacje o każdym typie elementu.

Literał wartości Typ
("Id", 0, 1.) (String, Int, Double)
(PauliX,(3,1)) (Pauli, (Int, Int))

Krotki zawierające pojedynczy element są traktowane jako identyczne z samym elementem, zarówno w typie, jak i wartości, nazywane równoważnością krotki pojedynczej.

Krotki są używane do łączenia wartości w jedną wartość, co ułatwia ich przekazywanie. Dzięki temu każdy wywołalny może przyjmować dokładnie jedno dane wejściowe i zwracać dokładnie jedno dane wyjściowe.

Literały dla typów zdefiniowanych przez użytkownika

Wartości typu zdefiniowanego przez użytkownika są tworzone przez wywołanie konstruktora. Konstruktor domyślny jest generowany automatycznie podczas deklarowania typu. Obecnie nie można zdefiniować konstruktorów niestandardowych.

Na przykład jeśli IntPair ma dwa elementy typu Int, tworzy IntPair(2, 3) nowe wystąpienie, wywołując konstruktor domyślny.

Literały operacji i funkcji

Operacje anonimowe i funkcje można tworzyć przy użyciu wyrażenia lambda.