Q# 프로그램은 어떻게 구성되나요?
Q# 양자 프로그래밍 언어에는 잘 정의된 구조가 있습니다. 이 단원에서는 Q# 프로그램의 기본 구성 요소를 검토합니다.
네임스페이스
모든 Q# 파일은 네임스페이스로 시작합니다. 예를 들면 다음과 같습니다.
namespace HelloQuantum {
// Your code goes here.
}
namespace
키워드(keyword) 네임스페이스를 정의하는 데 사용됩니다. 네임스페이스는 Q# 코드를 논리 단위로 구성하는 데 사용됩니다. 프로그램에서 Q# 라이브러리를 사용하고 사용자 고유의 라이브러리를 작성하는 경우에는 그 사용이 중요해집니다.
라이브러리
Q# 라이브러리에는 양자 프로그램에서 사용할 수 있는 함수와 연산이 포함되어 있습니다. 라이브러리에서 함수 또는 작업을 호출할 때 지시문을 사용하고 open
라이브러리의 네임스페이스를 지정합니다. 예시:
namespace HelloQuantum {
open Microsoft.Quantum.Intrinsic;
@EntryPoint()
operation HelloQ() : Unit {
Message("Hello quantum world!");
}
}
이 예제에서 지시문은 open
Q# 컴파일러에 네임스페이 Message
스에서 Microsoft.Quantum.Intrinsic
작업을 찾도록 지시합니다.
진입점
EntryPoint
는 Q# 컴파일러에 프로그램 실행을 시작할 위치를 알려줍니다. 모든 Q# 프로그램에는 하나 이상의 진입점과 연산이 있어야 합니다.
큐빗 할당
Q#에서는 큐빗을 얻기 위해 use
키워드를 사용합니다. 키워드(keyword) 할당하는 use
모든 큐비트는 |0> 상태에서 시작됩니다.
한 번에 하나 또는 여러 개의 큐빗을 할당할 수 있습니다. 다음은 1개와 5개의 큐비트를 할당하는 예제입니다.
use q1 = Qubit(); // Allocate one qubit
use q5 = Qubit[5]; // Allocate five qubits
양자 연산
작업은 Q# 프로그램의 기본 구성 요소입니다. Q# 작업은 양자 서브루틴입니다. 즉, 큐빗 레지스터의 상태를 수정하는 양자 작업을 포함하는 호출 가능 루틴입니다.
Q# 작업을 정의하려면 해당 입력 및 해당 출력과 함께 작업 이름을 지정합니다. 기본 예제는 다음과 같습니다.
@EntryPoint()
operation SayHelloQ() : Unit {
Message("Hello quantum world!");
}
여기에서 SayHelloQ
가 작업의 이름입니다. 이 작업은 입력으로 0개의 인수를 사용하고 Unit
형식을 반환합니다. 즉, 정보를 반환하지 않습니다.
또한 Q# 라이브러리는 프로그램에서 사용할 수 있는 작업을 제공합니다. 나중에 사용할 한 가지 작업은 H
작업입니다. Z축 기준 큐비트라면 H
연산에서는 이 큐비트를 짝수 중첩으로 만듭니다. 중첩 상태에서 이 큐비트가 0 또는 1로 측정될 확률이 50%입니다.
형식
Q#에서는 Int
, Double
, Bool
, String
등 이미 친숙한 여러 가지 기본 제공 형식을 양자 컴퓨팅 고유 형식과 함께 제공합니다. Q#도 범위, 배열 및 튜플을 정의하는 형식을 제공합니다. 사용자가 사용자 지정 형식을 정의할 수도 있습니다.
이 모듈에서는 Result
형식으로 작업합니다. Result
는 큐빗 측정 결과를 나타내며 두 개의 가능한 값 One
및 Zero
중 하나를 가질 수 있습니다.
큐비트 측정
Q#에서 Pauli 측정은 지정된 Pauli 베이스에서 하나 이상의 큐비트의 공동 측정을 수행하는 작업을 적용하여 Measure
수행됩니다. 작업에서 Measure
형식을 반환 Result
합니다. 즉, 형식입니다 One
Zero
.
참고 항목
기준 배열과 큐비트 배열의 길이가 다른 경우 Measure
연산이 실패합니다.
계산 기준 {|0} ,|1}}으로 측정을 구현하려면 Pauli Z 기준으로 단일 큐비트의 측정을 수행하는 연산을 사용할 M
수도 있습니다. 따라서 작업은 M
적용하는 것과 Measure([PauliZ], [qubit])
같습니다.
간단한 예는 |0> 상태에서 하나의 큐비트를 할당한 다음 Hadamard 작업을 H
적용하고 결과를 PauliZ
기준으로 측정하는 다음 프로그램입니다.
@EntryPoint()
operation MeasureOneQubit() : Result {
// Allocate a qubit, by default it is in zero state
use q = Qubit();
// We apply a Hadamard operation H to the state
// It now has a 50% chance of being measured 0 or 1
H(q);
// Now we measure the qubit in Z-basis.
let result = M(q);
// Reset the qubit so it can be safely released.
Reset(qubit);
return result;
}
참고 항목
이 Reset
작업은 큐비트를 |0> 상태로 다시 설정하는 데 사용됩니다. Q#에서 큐비트는 해제될 때까지 |0> 상태여야 합니다.