Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Con lo stato attivo per l'algoritmo quantistico più verso ciò che si dovrebbe ottenere piuttosto che su una rappresentazione del problema in termini di strutture di dati, l'acquisizione di una prospettiva più funzionale sulla progettazione del linguaggio è una scelta naturale. Allo stesso tempo, il sistema dei tipi è un potente meccanismo che può essere usato per l'analisi del programma e altri controlli in fase di compilazione che facilitano la formulazione di codice affidabile.
In generale, il sistema di tipi Q# è piuttosto minimalista, nel senso che non esiste una nozione esplicita di classi o interfacce come si potrebbe usare per i linguaggi classici come C# o Java. Prendiamo anche un approccio un po ' pragmatico che fa progressi incrementali, in modo che determinati costrutti non siano ancora completamente integrati nel sistema dei tipi. Un esempio è rappresentato da funtori, che possono essere usati all'interno di espressioni, ma che non hanno ancora una rappresentazione nel sistema dei tipi. In modo corrispondente, non possono essere assegnati o passati come argomenti, analogamente a quanto accade per i callable parametrizzati di tipo. Ci aspettiamo di fare progressi incrementali nell'estensione del sistema dei tipi per essere più completi e bilanciare le esigenze immediate con piani a lungo termine.
Tipi disponibili
Tutti i tipi in Q# sono non modificabili.
TIPO | Descrizione |
---|---|
Unit |
Rappresenta un tipo singleton il cui unico valore è () . |
Int |
Rappresenta un intero con segno a 64 bit. Valori intervallo compreso tra -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807. |
BigInt |
Rappresenta valori interi con segno di qualsiasi dimensione. |
Double |
Rappresenta un numero a virgola mobile a precisione doppia a 64 bit. Valori intervallo compreso tra -1,79769313486232e308 e 1,79769313486232e308 e NaN (non un numero). |
Bool |
Rappresenta valori booleani . I valori possibili sono true o false . |
String |
Rappresenta il testo come valori costituiti da una sequenza di unità di codice UTF-16. |
Qubit |
Rappresenta un identificatore opaco in base al quale è possibile risolvere la memoria quantistica virtuale.
i valori di tipo Qubit vengono create istanze tramite allocazione. |
Result |
Rappresenta il risultato di una misura proiettata negli spazi eigeni di un operatore quantistico con valori eigeno ±1. I possibili valori sono Zero o One . |
Pauli |
Rappresenta una matrice Pauli a qubit singolo. I possibili valori sono PauliI , PauliX , PauliY o PauliZ . |
Range |
Rappresenta una sequenza ordinata di valori Int equamente spaziati.
Valori possono rappresentare sequenze in ordine crescente o decrescente. |
Array | Rappresenta valori che contengono una sequenza di valori dello stesso tipo. |
Tupla | Rappresenta valori che contengono un numero fisso di elementi di tipi diversi. Le tuple contenenti un singolo elemento sono equivalenti all'elemento che contengono. |
struct |
Rappresenta un tipo definito dall'utente costituito da elementi denominati di tipi diversi. i valori vengono create istanze durante la dichiarazione di una nuova istanza. |
Operazione | Rappresenta un non deterministico chiamabile che accetta un argomento di input (possibilmente con valori di tupla) e restituisce un output (possibilmente con valori di tupla). Le chiamate all'operazione valori possono avere effetti collaterali e l'output può variare per ogni chiamata, anche quando viene richiamato con lo stesso argomento. |
Funzione | Rappresenta un deterministico chiamabile che accetta un argomento di input (possibilmente con valori di tupla) e restituisce un output (possibilmente con valori di tupla). Le chiamate alla funzione valori non hanno effetti collaterali e l'output sarà sempre lo stesso dato lo stesso input. |