Valori letterali
Valore letterale unità
L'unico valore letterale esistente per il tipo Unit
è il valore ()
.
Il Unit
valore viene comunemente usato come argomento per le chiamate, perché non è necessario passare altri argomenti o per ritardare l'esecuzione. Viene usato anche come valore restituito quando non è necessario restituire altri valori, vale a dire il caso per le operazioni unitarie, ovvero le operazioni che supportano e Adjoint
/o il Controlled
functor.
Valori letterali Int
I valori letterali per il tipo Int
possono essere espressi nella rappresentazione in formato binario, ottale, decimale o esadecimale. I valori letterali espressi in formato binario sono preceduti dal prefisso 0b
,quelli in formato ottale da 0o
e quelli in formato esadecimale da 0x
. Non esiste alcun prefisso per la rappresentazione in formato decimale di uso comune.
Rappresentazione | Valore letterale del valore |
---|---|
Binary | 0b101010 |
Ottale | 0o52 |
Decimal | 42 |
Valore esadecimale | 0x2a |
Valori letterali BigInt
I valori letterali per il tipo BigInt
presentano sempre il suffisso L
e possono essere espressi nella rappresentazione in formato binario, ottale, decimale o esadecimale. I valori letterali espressi in formato binario sono preceduti dal prefisso 0b
,quelli in formato ottale da 0o
e quelli in formato esadecimale da 0x
. Non esiste alcun prefisso per la rappresentazione in formato decimale di uso comune.
Rappresentazione | Valore letterale del valore |
---|---|
Binary | 0b101010L |
Ottale | 0o52L |
Decimal | 42L |
Valore esadecimale | 0x2aL |
Valori letterali double
I valori letterali per il tipo Double
possono essere espressi nella notazione scientifica o standard.
Rappresentazione | Valore letterale del valore |
---|---|
Standard | 0.1973269804 |
Notazione scientifica | 1.973269804e-1 |
Se non segue nulla dopo il separatore decimale, la cifra dopo il separatore decimale può essere omessa. Ad esempio, 1.
è un valore letterale valido Double
e uguale a 1.0
.
Valori letterali Bool
I valori letterali esistenti per il tipo Bool
sono true
e false
.
Valori letterali di stringa
Un valore letterale per il tipo String
è una sequenza di lunghezza arbitraria di caratteri Unicode racchiusi tra virgolette doppie.
All'interno di una stringa, il carattere di barra rovesciata \
può essere usato per eseguire l'escape di un carattere di virgolette doppie e per inserire una nuova riga come \n
, un ritorno a capo come \r
e una tabulazione come \t
.
I seguenti sono esempi di valori letterali stringa validi:
"This is a simple string."
"\"This is a more complex string.\", she said.\n"
Q# supporta anche le stringhe interpolate.
Una stringa interpolata è un valore letterale stringa che può contenere un numero qualsiasi di espressioni di interpolazione. Queste espressioni possono essere di tipi arbitrari.
In fase di costruzione, le espressioni vengono valutate e la relativa rappresentazione String
viene inserita alla posizione corrispondente all'interno del valore letterale definito. L'interpolazione è abilitata anteponendo il carattere $
speciale direttamente prima dell'offerta iniziale, senza spazi vuoti tra di essi.
Ad esempio, se res
è un'espressione che restituisce 1
, la seconda frase nel valore letterale seguente String
visualizza "Il risultato era 1".:
$"This is an interpolated string. The result was {res}."
Valori letterali Qubit
Non esistono valori letterali per il tipo Qubit
, perché la memoria quantistica è gestita dal runtime. I valori di tipo Qubit
possono quindi essere ottenuti solo tramite allocazione.
I valori di tipo Qubit
rappresentano un identificatore opaco in base al quale è possibile indirizzare un bit quantistico o un qubit. L'unico operatore che supportano è il confronto di uguaglianza. Per altre informazioni sul Qubit
tipo di dati, vedere Qubit.
Valori letterali risultato
I valori letterali esistenti per il tipo Result
sono Zero
e One
.
I valori di tipo Result
rappresentano il risultato di una misurazione quantistica binaria.
Zero
indica una proiezione nell'autospazio +1, One
indica una proiezione nell'autospazio -1.
Valori letterali Pauli
I valori letterali esistenti per il tipo Pauli
sono PauliI
, PauliX
, PauliY
e PauliZ
.
I valori di tipo Pauli
rappresentano una delle quattro matrici Pauli a singolo qubit, in cui PauliI
rappresenta l'identità.
I valori di tipo Pauli
vengono usati in genere per indicare l'asse per le rotazioni e per specificare la base rispetto alla quale effettuare la misurazione.
Valori letterali di intervallo
I valori letterali per il tipo Range
sono espressioni in formato start..step..stop
, dove start
, step
e end
sono espressioni di tipo Int
. Se la dimensione del passaggio è una, potrebbe essere omessa. Ad esempio, start..stop
è un valore letterale valido Range
e uguale a start..1..stop
.
I valori di tipo Range
rappresentano una sequenza di interi, dove il primo elemento della sequenza è start
e gli elementi successivi vengono ottenuti aggiungendo step
a quello precedente, fino a quando non viene passato stop
.
Range
i valori sono inclusivi in entrambe le estremità, ovvero l'ultimo elemento dell'intervallo è stop
se la differenza tra start
e stop
è un multiplo di step
.
Un intervallo può essere vuoto se, ad esempio, step
è positivo e stop < start
.
I seguenti sono esempi di valori letterali Range
validi:
-
1..3
è l'intervallo 1, 2, 3. -
2..2..5
è l'intervallo 2, 4. -
2..2..6
è l'intervallo 2, 4, 6. -
6..-2..2
è l'intervallo 6, 4, 2. -
2..-2..1
è l'intervallo 2. -
2..1
è l'intervallo vuoto.
Per altre informazioni, vedere Espressioni contestuali.
Valori letterali di matrice
Un valore letterale matrice è una sequenza di zero o più espressioni, separate da virgole e racchiuse [
tra parentesi quadre e ]
, [1,2,3]
ad esempio .
Tutte le espressioni devono avere un tipo di base comune, ovvero il tipo di elemento della matrice. Se viene specificata una matrice vuota con []
, potrebbe essere necessaria un'annotazione di tipo per consentire al compilatore di determinare il tipo appropriato dell'espressione.
È possibile creare matrici di lunghezza arbitraria usando un'espressione di matrice di dimensioni.
Tale espressione è nel formato [expr, size = s]
, dove s
può essere qualsiasi espressione di tipo Int
e expr
viene valutata in un valore che sarà gli elementi della matrice ripetutamente s
. Ad esempio, [1.2, size = 3]
crea la stessa matrice di [1.2, 1.2, 1.2]
.
Valori letterali tupla
Un valore letterale tupla è una sequenza di una o più espressioni di qualsiasi tipo, separate da virgole e racchiuse (
tra parentesi e )
. Il tipo della tupla include le informazioni su ogni tipo di elemento.
Valore letterale del valore | Tipo |
---|---|
("Id", 0, 1.) |
(String, Int, Double) |
(PauliX,(3,1)) |
(Pauli, (Int, Int)) |
Le tuple contenenti un singolo elemento vengono considerate identiche all'elemento stesso, sia nel tipo che nel valore, denominata equivalenza della tupla singleton.
Le tuple vengono usate per aggregare i valori in un singolo valore, semplificandone il passaggio. Ciò consente a ogni chiamabile di accettare esattamente un input e restituire esattamente un output.
Valori letterali per i tipi definiti dall'utente
I valori di un tipo definito dall'utente vengono costruiti richiamando il relativo costruttore. Un costruttore predefinito viene generato automaticamente durante la dichiarazione del tipo. Non è attualmente possibile definire costruttori personalizzati.
Se ad esempio IntPair
ha due elementi di tipo Int
, IntPair(2, 3)
crea una nuova istanza richiamando il costruttore predefinito.
Operazioni e valori letterali di funzione
È possibile creare operazioni e funzioni anonime usando un'espressione lambda.