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
\n
i 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
, PauliY
i 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
, step
i 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ą step
wartoś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.