首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对QDK中受控操作中惊人行为的质疑

对QDK中受控操作中惊人行为的质疑
EN

Stack Overflow用户
提问于 2020-06-20 08:38:57
回答 1查看 43关注 0票数 1

我一直在学习QDK,并观察到为下列程序提供的输出:

节目:“”

代码语言:javascript
复制
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();
}

输出:

代码语言:javascript
复制
Started Execution
Is Zero
Is One

我不明白为什么是打印在这里的一个?我认为输入的量子位数是00,那么为什么第二个受控操作执行BitIsOne函数?

更新以提供所请求的信息,以支持答案中的解释(代码编辑以获取信息并确认解释)

已将BitIsOne函数更改为包含X(qs)。这表明量子操作没有在其他部分执行,但是经典的函数"Message“确实执行了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-20 16:19:14

试着在最后测量量子位元,并分享结果。不管什么东西被印出来都应该是00。量子中的“控制”不像经典的IF语句,因为“当时”部分和“其他”部分都会“执行”。非量程"Message“语句在"ELSE”部分中得到“执行”,尽管在量词中,“terms”部分是"No-Op“(Identity)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62483556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档