Linguagem de computação quântica
# Linguagem de computação quântica

Linguagem de computação quântica (QCL) é uma das primeiras linguagens de programação quântica. A característica mais importante do QCL é o suporte para operadores e funções definidos pelo usuário. A sua sintaxe é semelhante à sintaxe da linguagem de programação C e seus tipos de dados clássicos são semelhantes aos tipos de dados primitivos em C. Pode-se combinar código clássico e código quântico no mesmo programa.
A biblioteca padrão QCL fornece operadores quânticos padrões utilizados em algoritmos quânticos, tais como:
* não-controlado com diversos qubits alvos,
* Operação de Hadamard em vários qubits,
* fase de parseamento e de controle.

## Sintaxe

* Tipos de dados
** Quântico - qureg, quvoid, quconst, quscratch, qucond
** Clássico - int, real, complexo, boolean, string, vetor, matriz, tensor
* Tipos de função
** qufunct - Operadores pseudo-clássicos. Só pode alterar a permutação de estados básicos.
** operator - Operadores unários gerais. Pode alterar a amplitude.
** procedure - Pode chamar medida, imprimir e copiar dentro dessa função. Esta função é não-invertível.
* Funções internas
** Quântico
*** qufunct - Fanout, Swap, Perm2, Perm4, Perm8, Not, CNot
*** operator - Matrix2x2, Matrix4x4, Matrix8x8, Rot, Mix, H, CPhase, SqrtNot, X, Y, Z, S, T
*** procedure - measure, dump, reset
** Clássico
*** Aritmética - sin, cos, tan, log, sqrt, ...
*** Complexo - Re, Im, conj

## Exemplos

O tipo de dado básico embutido em QCL é o qureg (quantum register). Ele pode ser interpretado como uma matriz de qubits (quantum bits).
Já que o interpretador QCL usa a biblioteca de simulação qlib, é possível observar o estado interno da máquina quântica durante a execução do programa quântico.
Note que a operação dump é diferente de measurement, uma vez que não influencia o estado da máquina quântica e pode ser realizado apenas usando um simulador.
Como nas linguagens de programação modernas, é possível definir novas operações que podem ser usadas para manipular os dados quânticos. Por exemplo:
define inverso sobre o operador de média usado no Algoritmo de Grover. Isso permite definir algoritmos em um nível mais alto de abstração e expandir a biblioteca de funções disponíveis para os programadores.