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.