我想用F#编写量子程序,但是我不知道如何从F#调用Q#操作。我该怎么做?
我尝试先阅读C#版本,但它似乎不能很好地转换为F#。
答案 0 :(得分:6)
TL; DR:您必须创建一个Q#库项目(这将产生一个仅包含Q#文件的.csproj
项目),并从纯F#应用程序中引用它。
您不能在同一项目中混合使用F#和Q#,因为它不会编译:Q#可以编译为C#进行本地模拟,并且您不能在同一项目中使用C#和F#。但是,您可以有两个使用不同语言的独立项目,它们都可以编译成MSIL并且可以互相引用。
步骤是:
创建Q#库QuantumCode
并在其中编写代码。
比方说,您的代码有一个带有签名operation RunAlgorithm (bits : Int[]) : Int[]
的入口点(即,它将整数数组作为参数,并返回另一个整数数组)。
创建一个F#应用程序(为简单起见,使它成为针对.NET Core的控制台应用程序)FsharpDriver
。
在F#应用程序中添加对Q#库的引用。
安装NuGet软件包Microsoft.Quantum.Development.Kit,它将对F#应用程序添加Q#支持。
您将不会在FsharpDriver
中编写任何Q#代码,但是您将需要使用QDK提供的功能来创建量子模拟器以运行您的量子代码,并定义用于传递的数据类型。量子程序的参数。
用F#编写驱动程序。
// Namespace in which quantum simulator resides
open Microsoft.Quantum.Simulation.Simulators
// Namespace in which QArray resides
open Microsoft.Quantum.Simulation.Core
[<EntryPoint>]
let main argv =
printfn "Hello Classical World!"
// Create a full-state simulator
use simulator = new QuantumSimulator()
// Construct the parameter
// QArray is a data type for fixed-length arrays
let bits = new QArray<int64>([| 0L; 1L; 1L |])
// Run the quantum algorithm
let ret = QuantumCode.RunAlgorithm.Run(simulator, bits).Result
// Process the results
printfn "%A" ret
0 // return an integer exit code
我张贴了项目代码here的完整示例(最初该项目使用VB.NET中的Q#处理,但对于F#,所有步骤都相同)。