QS5026—这里不能重赋变量



我正在遵循微软官方学习页面(https://learn.microsoft.com/en-us/azure/quantum/tutorial-qdk-explore-entanglement?pivots=ide-azure-portal)关于量子纠缠的教程。

基本上,我复制了一个例子张贴在那里,我得到错误:

QS5026变量"numOnesQ1"不能在这里重新分配。在依赖于测量结果的条件块中,目标QuantinuumProcessor只支持在块中声明的变量的重新分配。

我明白它说什么,但这只是微软官方教程的副本。我错过了一些简单的东西,比如导入,错误的设置?如果没有,我如何以其他方式设置依赖于测量结果的条件块外声明的变量?

下面是我的代码:
namespace Quantum.QuantumDream {
open Microsoft.Quantum.Canon;
open Microsoft.Quantum.Intrinsic;
operation GetRandomResult() : Result {
use q = Qubit();
H(q);
return M(q);
}
@EntryPoint()
operation TestBellState(count : Int, initial : Result) : (Int, Int, Int, Int) {
mutable numOnesQ1 = 0;
mutable numOnesQ2 = 0;
// allocate the qubits
use (q1, q2) = (Qubit(), Qubit());   
for test in 1..count {
SetQubitState(initial, q1);
SetQubitState(Zero, q2);

// measure each qubit
let resultQ1 = M(q1);            
let resultQ2 = M(q2);           
// Count the number of 'Ones':
if resultQ1 == One {
set numOnesQ1 += 1;
}
if resultQ2 == One {
set numOnesQ2 += 1;
}
}
// reset the qubits
SetQubitState(Zero, q1);             
SetQubitState(Zero, q2);

// Return number of |0> states, number of |1> states
Message("q1:Zero, One  q2:Zero, One");
return (count - numOnesQ1, numOnesQ1, count - numOnesQ2, numOnesQ2 );
}
operation SetQubitState(desired : Result, target : Qubit) : Unit {
if desired != M(target) {
X(target);
}
}
}

本教程代码只能在本地模拟器上运行(在Jupyter Notebook中使用%simulate魔术命令)。从错误消息来看,似乎您试图在quantum目标之一上运行它,而quantum目标对于您在代码中可以执行的操作有一些限制。要在quantum上运行等效的代码,您需要为循环体定义一个操作(准备一个状态并测量它),并将其作为作业运行——云目标将自己处理循环,多次运行您的代码并向您返回结果的直方图。例如,您可以在Azure Portal的示例库中看到QRNG示例。

最新更新