gpt4 book ai didi

c# - 我可以在 Q# 中使用 lambda 来对量子位进行操作吗?

转载 作者:太空狗 更新时间:2023-10-29 21:42:35 27 4
gpt4 key购买 nike

我在 Q# 中有一个用例,其中我有量子位寄存器 qs 并且需要在除第一个之外的每个量子位上应用 CNOT 门,使用第一个作为控制。使用 for 循环我可以按如下方式进行:

for (i in 1..Length(qs)-1) {
CNOT(qs[0], qs[i]);
}

现在,我想给它一个更实用的风格,并尝试做一些类似的事情:

ApplyToEach(q => CNOT(qs[0], q), qs[1..Length(qs)-1]);

Q# 编译器不接受这样的表达式,通知我它遇到了意外的代码片段。这对我的口味来说不是太有用。一些文档声称 Q# 支持匿名函数 a'la C#,因此进行了上述尝试。谁能指出我在 Q# 中正确使用 lambda 或消除我的错误信念?

最佳答案

目前,Q# 不支持 lambda 函数和操作(尽管这将是一个很好的功能请求,可以在 https://github.com/microsoft/qsharp-compiler/issues/new/choose 提交)。也就是说,您可以通过使用部分应用程序获得从 lambda 获得的许多功能风格。例如,在您的示例中,我也可以将 for 循环写为:

 ApplyToEach(CNOT(Head(qs), _), Rest(qs));

这里,由于 CNOT 的类型为 (Qubit, Qubit) => Unit is Adj + Ctl,将两个输入之一填写为 CNOT(Head (qs), _) 导致 Qubit => Unit is Adj + Ctl 类型的操作。

部分应用程序是一个非常强大的功能,在整个 Q# 标准库中都使用它来提供构建量子程序的功能性方法。如果您有兴趣了解更多信息,我建议您查看 https://learn.microsoft.com/quantum/language/expressions#callable-invocation-expressions 上的文档。 .

关于c# - 我可以在 Q# 中使用 lambda 来对量子位进行操作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57888370/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com