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
. Analogamente, se le cifre prima del separatore decimale sono tutte zero, è possibile che vengano omesse. Ad esempio, .1
è un valore letterale valido Double
e uguale a 0.1
.
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 una 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.
È possibile creare matrici di lunghezza arbitraria, in particolare matrici vuote, usando una nuova espressione di matrice.
Il formato di tale espressione è new <ItemType>[expr]
, dove expr
può essere qualsiasi espressione di tipo Int
e <ItemType>
deve essere sostituito dal tipo degli elementi della matrice.
Ad esempio, new Int[10]
crea una matrice di interi contenente dieci elementi.
È possibile eseguire query sulla lunghezza di una matrice con la funzione Length
. Viene definita nello spazio dei nomi aperto automaticamente Microsoft.Quantum.Core
e restituisce un valore Int
.
Tutti gli elementi nella matrice creata vengono impostati sul valore predefinito del tipo di elemento.
Le matrici contenenti qubit oppure oggetti chiamabili devono essere inizializzate correttamente con valori non predefiniti prima di poter usare in modo sicuro i relativi elementi.
Le routine di inizializzazione adatte sono disponibili nello spazio dei nomi Microsoft.Quantum.Arrays
.
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, denominato 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.
Valori predefiniti
Type | Predefinito |
---|---|
Unit |
() |
Int |
0 |
BigInt |
0L |
Double |
0.0 |
Bool |
false |
String |
"" |
Qubit |
qubit non valido |
Result |
Zero |
Pauli |
PauliI |
Range |
intervallo vuoto |
Array | matrice vuota |
Tupla | tutti gli elementi sono impostati su valori predefiniti |
Tipo definito dall'utente | tutti gli elementi sono impostati su valori predefiniti |
Operazione | operazione non valida |
Funzione | funzione non valida |
Per qubit e oggetti chiamabili, il valore predefinito è un riferimento non valido che non può essere usato senza causare un errore di runtime.