Condividi tramite


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.