Jakie są główne składniki programu w języku Q#?
Przed rozpoczęciem pisania programów kwantowych ważne jest zrozumienie struktury i składników programu języka Q#.
W tej lekcji zapoznasz się z głównymi składnikami programu w języku Q#.
Main
Operacja
Każdy program w języku Q# musi zawierać co najmniej jedną operację, która jest zwykle operacją Main
. Operacja Main
jest punktem wejścia programu. Domyślnie kompilator języka Q# rozpoczyna wykonywanie programu z Main()
operacji. Opcjonalnie możesz użyć atrybutu @EntryPoint()
, aby określić dowolną operację w programie jako punkt wykonywania.
Na przykład następujący kod definiuje operację punktu wejścia: MeasureOneQubit
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
Można jednak również napisać ten kod bez atrybutu @EntryPoint()
, zmieniając MeasureOneQubit()
nazwę operacji na Main()
:
// The Q# compiler automatically detects the Main() operation as the entry point.
operation Main() : Result {
...
}
Typy
Język Q# udostępnia wiele wbudowanych typów, które mogą być już znane, w tym Int
, Double
, Bool
i String
. Język Q# udostępnia również typy specyficzne dla obliczeń kwantowych, takich jak Qubit
i Result
.
W tym przykładzie MeasureOneQubit
operacja zwraca Result
typ. Typ Result
jest wynikiem pomiaru kubitu i może mieć One
wartość lub Zero
.
operation MeasureOneQubit() : Result {
...
}
Biblioteki kwantowe
Biblioteki języka Q# zawierają funkcje i operacje, których można używać w programach kwantowych. Podczas wywoływania funkcji lub operacji z biblioteki należy użyć import
dyrektywy i określić przestrzeń nazw biblioteki. Aby na przykład użyć Message
funkcji z Microsoft.Quantum.Intrinsic
przestrzeni nazw w standardowej bibliotece kwantowej, należy wykonać następujące czynności:
// imports all functions and operations from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.*;
Message("Hello quantum world!");
// imports just the `Message` function from Microsoft.Quantum.Intrinsic
import Microsoft.Quantum.Intrinsic.Message;
Message("Hello quantum world!");
Przestrzenie nazw w bibliotece standardowej można importować przy użyciu Std
zamiast Microsoft.Quantum
. Na przykład:
// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
Message("Hello quantum world!");
Przydzielanie kubitów
W języku Q#, aby przydzielić kubit, należy użyć słowa kluczowego use
i Qubit
typu. Każdy kubit przydzielany za pomocą słowa kluczowego use
rozpoczyna się w stanie $\ket{0}$.
Możesz przydzielić jeden lub wiele kubitów jednocześnie. Oto przykład, który przydziela jeden i pięć kubitów:
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
Mierzenie kubitów
W języku Q# Measure
operacja wykonuje wspólną miarę jednego lub większej liczby kubitów w określonych bazach Pauli, które mogą być PauliX
, PauliY
lub PauliZ
. Operacja Measure
zwraca Result
typ, który ma One
wartość lub Zero
.
Aby zaimplementować pomiar w podstawie obliczeniowej $\lbrace\ket{0},\ket{1}\rbrace$ można również użyć M
operacji, która wykonuje pomiar w pauli Z-basis. W związku z tym operacja jest równoważna M
zastosowaniu Measure([PauliZ], [qubit])
metody .
Resetowanie kubitów
W języku Q#kubity muszą być w stanie $\ket{0}$ o czas ich wydania. Po zakończeniu korzystania z kubitu użyjesz Reset
operacji , aby zresetować kubit do $\ket{0}$.
// Reset the qubit so it can be safely released.
Reset(qubit);