Q# 프로그램의 주요 구성 요소는 무엇일까요?
양자 프로그램 작성을 시작하기 전에 Q# 프로그램의 구조와 구성 요소를 이해하는 것이 중요합니다.
이 단원에서는 Q# 프로그램의 주요 구성 요소를 검토합니다.
Main
연산
모든 Q# 프로그램은 일반적으로 Main
연산인 작업을 하나 이상 포함해야 합니다. Main
연산은 프로그램의 진입점입니다. 기본적으로 Q# 컴파일러는 Main()
연산에서 프로그램 실행을 시작합니다. 필요에 따라 @EntryPoint()
특성을 사용하여 프로그램의 모든 연산을 실행 지점으로 지정할 수 있습니다.
예를 들어 다음 코드는 MeasureOneQubit
진입점 연산을 정의합니다.
@EntryPoint()
operation MeasureOneQubit() : Result {
...
}
그러나 MeasureOneQubit()
연산의 이름을 Main()
(으)로 지정하여 @EntryPoint()
특성 없이 해당 코드를 작성할 수도 있습니다.
// The Q# compiler automatically detects the Main() operation as the entry point.
operation Main() : Result {
...
}
유형
Q#에서는 Int
, Double
, Bool
, String
을 포함하여 이미 익숙할 수 있는 다양한 기본 제공 형식을 제공합니다. Q#은 Qubit
및 Result
과(와) 같은 양자 컴퓨팅과 관련된 형식도 제공합니다.
이 예제에서 MeasureOneQubit
연산은 Result
형식을 반환합니다. Result
형식은 큐비트를 측정한 결과이며 One
또는 Zero
일 수 있습니다.
operation MeasureOneQubit() : Result {
...
}
양자 라이브러리
Q# 라이브러리에는 양자 프로그램에서 사용할 수 있는 함수와 연산이 포함되어 있습니다. 라이브러리에서 함수 또는 연산을 호출할 때 import
지시문을 사용하여 라이브러리의 네임스페이스를 지정합니다. 예를 들어 표준 양자 라이브러리의 Microsoft.Quantum.Intrinsic
네임스페이스에서 Message
함수를 사용하려면 다음을 수행합니다.
// 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!");
표준 라이브러리의 네임스페이스는 Microsoft.Quantum
대신 Std
을(를) 사용하여 가져올 수 있습니다. 예시:
// imports all functions and operations from Microsoft.Quantum.Intrinsic == Std.Intrinsic
import Std.Intrinsic.*;
Message("Hello quantum world!");
큐빗 할당
Q#에서 큐비트를 할당하려면 use
키워드와 Qubit
형식을 사용합니다. use
키워드를 사용하여 할당하는 모든 큐비트는 $\ket{0}$ 상태에서 시작됩니다.
한 번에 하나 또는 여러 개의 큐빗을 할당할 수 있습니다. 다음은 1개와 5개의 큐비트를 할당하는 예제입니다.
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
큐비트 측정
Q#에서 Measure
작업은 지정된 Pauli 기준에서 하나 이상의 큐비트의 공동 측정을 수행하는데, 이러한 기준은 PauliX
, PauliY
또는 PauliZ
일 수 있습니다. Measure
연산은 One
또는 Zero
인 Result
형식을 반환합니다.
계산 기준 $\lbrace\ket{0},\ket{1}\rbrace$에서 측정값을 구현하려면 Pauli Z 기준으로 측정을 수행하는 M
작업을 사용할 수도 있습니다. 따라서 M
작업은 Measure([PauliZ], [qubit])
을(를) 적용하는 것과 같습니다.
큐비트 다시 설정
Q#에서 큐비트는 릴리스될 때까지 $\ket{0}$ 상태여야 합니다. 큐비트 사용을 마쳤으면 Reset
작업을 사용하여 큐비트를 $\ket{0}$(으)로 다시 설정합니다.
// Reset the qubit so it can be safely released.
Reset(qubit);