Q# 프로그램은 어떻게 구성되나요?
양자 프로그램 작성을 시작하기 전에 Q# 프로그램의 구조와 구성 요소를 이해하는 것이 중요합니다.
이 단원에서는 Q# 프로그램의 주요 구성 요소를 검토합니다.
네임스페이스
모든 Q# 파일은 일반적으로 네임스페이스로 시작합니다. 예를 들면 다음과 같습니다.
namespace HelloQuantum {
// Your code goes here.
}
namespace
키워드는 네임스페이스를 정의하는 데 사용됩니다. 네임스페이스는 Q# 코드를 논리적 단위로 구성하는 데 사용됩니다. 프로그램에서 Q# 라이브러리를 사용하고 사용자 고유의 라이브러리를 작성하는 경우에는 그 사용이 중요해집니다.
큐빗 할당
Q#에서 큐비트를 얻으려면 use
키워드를 사용합니다. use
키워드를 사용하여 할당하는 모든 큐비트는 $\ket{0}$ 상태에서 시작됩니다.
한 번에 하나 또는 여러 개의 큐빗을 할당할 수 있습니다. 다음은 1개와 5개의 큐비트를 할당하는 예제입니다.
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
양자 연산
작업은 Q# 프로그램의 기본 구성 요소입니다. Q# 작업은 양자 서브루틴입니다. 즉, 큐빗 레지스터의 상태를 수정하는 양자 작업을 포함하는 호출 가능 루틴입니다.
Q# 작업을 정의하려면 해당 입력 및 해당 출력과 함께 작업 이름을 지정합니다. 기본 예제는 다음과 같습니다.
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
여기에서 SayHelloQ
가 작업의 이름입니다. 이 작업은 입력으로 0개의 인수를 사용하고 Unit
형식을 반환합니다. 즉, 정보를 반환하지 않습니다.
또한 Q# 라이브러리는 큐비트를 중첩 상태로 만드는 Hadamard, H
, 작업과 같은 프로그램에서 사용할 수 있는 작업을 제공합니다.
유형
Q#에서는 Int
, Double
, Bool
, String
을 포함하여 이미 익숙할 수 있는 다양한 기본 제공 형식을 제공합니다.
이 예제에서 Unit
형식은 작업이 정보를 반환하지 않음을 나타내는 데 사용됩니다.
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
다음 단원에서는 양자 컴퓨팅과 관련된 형식인 Result
형식을 사용합니다. Result
형식은 큐비트를 측정한 결과이며 One
또는 Zero
일 수 있습니다.
양자 라이브러리
Q# 라이브러리에는 양자 프로그램에서 사용할 수 있는 함수와 연산이 포함되어 있습니다. 라이브러리에서 함수 또는 연산을 호출할 때 open
지시문을 사용하여 라이브러리의 네임스페이스를 지정합니다. 예를 들어 Microsoft.Quantum.Intrinsic
라이브러리를 사용하려면 다음을 수행합니다.
open Microsoft.Quantum.Intrinsic;
진입점
EntryPoint
은(는) Q# 컴파일러에 프로그램 실행을 시작할 위치를 알려줍니다. 모든 Q# 프로그램에는 하나의 진입점과 연산이 있어야 합니다. 예를 들어 다음 코드는 콘솔에 "Hello quantum world!"를 출력하는 진입점 작업(HelloQ
)을 정의합니다.
namespace HelloQuantum {
open Microsoft.Quantum.Intrinsic;
@EntryPoint()
operation HelloQ() : Unit {
Message("Hello quantum world!");
}
}
참고 항목
위의 Q# 프로그램은 콘솔에 메시지를 쓰는 Message
작업을 사용하기 위해 Microsoft.Quantum.Intrinsic
라이브러리를 엽니다.
큐비트 측정
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);