我一直在学习QDK,并观察到为下列程序提供的输出:
节目:“”
operation BitIsOne( qs : Qubit[] ): Unit is Adj+Ctl
{
Message( "Is One" );
X(qs[0]); // added in update
}
operation BitIsZero( qs: Qubit[] ): Unit is Adj+Ctl
{
Message( "Is Zero" );
}
operation RandomBehavior( qs: Qubit[] ) : Unit is Adj+Ctl
{
X( qs[0] );
Controlled BitIsZero( [qs[0]], Rest( qs ) );
X( qs[0] );
Controlled BitIsOne( [qs[0]], Rest( qs ) );
DumpMachine(""); // added in update
}
operation TestFunc3() : Unit is Adj+Ctl
{
using( qs = Qubit[3] )
{
RandomBehavior( qs[0..1] );
}
}
@EntryPoint()
operation Start2() : Unit {
Message(" Started Execution");
TestFunc3();
}输出:
Started Execution
Is Zero
Is One我不明白为什么是打印在这里的一个?我认为输入的量子位数是00,那么为什么第二个受控操作执行BitIsOne函数?
更新以提供所请求的信息,以支持答案中的解释(代码编辑以获取信息并确认解释)

已将BitIsOne函数更改为包含X(qs)。这表明量子操作没有在其他部分执行,但是经典的函数"Message“确实执行了。
发布于 2020-06-20 16:19:14
试着在最后测量量子位元,并分享结果。不管什么东西被印出来都应该是00。量子中的“控制”不像经典的IF语句,因为“当时”部分和“其他”部分都会“执行”。非量程"Message“语句在"ELSE”部分中得到“执行”,尽管在量词中,“terms”部分是"No-Op“(Identity)。
https://stackoverflow.com/questions/62483556
复制相似问题