변화

결합은 양자 계산에서 일반적입니다. 수학적 측면에서 이는 UV의 두 가지 일항 변환에 대한 U†VU 형식의 패턴입니다. 이 패턴은 계산에서 양자 상관 관계 또는 얽힘을 구축하여 양자의 고유한 자산을 활용하는 양자 메모리의 특수성으로 인해 관련이 있습니다. 그러나 이는 특정 서브루틴에 큐비트가 더 이상 필요하지 않은 경우 해당 상태를 관찰하면 시스템의 나머지 부분에 영향을 주므로 이러한 큐비트를 쉽게 다시 설정하고 해제할 수 없음도 의미합니다. 이러한 이유로 이전 계산의 효과는 일반적으로 양자 메모리를 해제하고 다시 사용하기 전에 되돌려야 합니다.

Q# 따라서 이러한 정리가 필요한 계산을 표현하기 위한 전용 구문이 있습니다. 식은 두 개의 코드 블록으로 구성됩니다. 하나는 U 구현을 포함하고 다른 하나는 V 구현을 포함합니다. uncomputation (즉, U† 애플리케이션)은 식의 일부로 자동으로 수행됩니다.

식은 폼을 사용합니다.

within {
    <statements>
}
apply {
    <statements>
}

여기서 <statements>는 각각 UV의 구현을 정의하는 임의 개수의 명령문으로 바뀝니다. 두 블록은 모두 within 블록에 적용되는 인접 버전을 자동으로 생성하기 위한 일반적인 제한 사항을 제외하고는 임의의 클래식 계산을 포함할 수 있습니다. within 블록의 일부로 사용되는 변경 가능하게 바인딩된 변수는 apply 블록의 일부로 재할당할 수 없습니다.