简而言之:如果我可以访问真正的量子计算机,是否有可能使用Q#控制它?
在你将其投入到必杀技之前,因为"现在还没有量子计算机可用":我是一名物理学家,我们的团队能够在现实世界的量子比特上做真正的大门.我也有一些编程背景(主要是C++).
因此,为了这个问题,让我们假装某人可以访问能够在多个量子位上执行某些量子操作的真实世界设备.显然,量子比特的数量可能是有限的,因此可能是可能的操作.我们还要说有人对Q#足够熟练,如果需要C#.是否有可能将计算从内置模拟器"重定向"到某个真实世界的设备?或者是否必须基本上重写整个Q#库?有没有办法定义我自己的QuantumSimulator,我将如何开始这样做?
我目前正在尝试提出一种巧妙的方法来实现标志,除了通常的“true”和“false”之外,还包括状态“default”和(可选)“toggle”。
标志的一般问题是,它有一个函数并希望通过传递某些参数来定义其行为(“做某事”或“不做某事”)。
使用单个(布尔值)标志,解决方案很简单:
void foo(...,bool flag){
if(flag){/*do something*/}
}
Run Code Online (Sandbox Code Playgroud)
在这里添加默认值特别容易,只需将函数更改为
void foo(...,bool flag=true)
Run Code Online (Sandbox Code Playgroud)
并在没有标志参数的情况下调用它。
一旦标志数量增加,我通常看到和使用的解决方案是这样的:
typedef int Flag;
static const Flag Flag1 = 1<<0;
static const Flag Flag2 = 1<<1;
static const Flag Flag3 = 1<<2;
void foo(/*other arguments ,*/ Flag f){
if(f & Flag1){/*do whatever Flag1 indicates*/}
/*check other flags*/
}
//call like this:
foo(/*args ,*/ Flag1 | Flag3)
Run Code Online (Sandbox Code Playgroud)
这样做的好处是,您不需要每个标志的参数,这意味着用户可以设置他喜欢的标志,而只需忘记他不关心的标志。特别是你不会接到电话,比如foo (/*args*/, true, false, true)你必须计算哪个真/假表示哪个标志。
这里的问题是:
如果你设置了一个默认参数,一旦用户指定了任何标志,它就会被覆盖。不可能像Flag1=true, Flag2=false, Flag3=default.
显然,如果我们想要 3 个选项(真、假、默认),我们需要为每个标志至少传递 2 位。因此,虽然它可能不是必需的,但我想任何实现都应该很容易使用第 …