如何从F#调用Q#操作

时间:2019-03-24 01:15:39

标签: f# q#

我想用F#编写量子程序,但是我不知道如何从F#调用Q#操作。我该怎么做?

我尝试先阅读C#版本,但它似乎不能很好地转换为F#。

1 个答案:

答案 0 :(得分:6)

TL; DR:您必须创建一个Q#库项目(这将产生一个仅包含Q#文件的.csproj项目),并从纯F#应用程序中引用它。

您不能在同一项目中混合使用F#和Q#,因为它不会编译:Q#可以编译为C#进行本地模拟,并且您不能在同一项目中使用C#和F#。但是,您可以有两个使用不同语言的独立项目,它们都可以编译成MSIL并且可以互相引用。

步骤是:

  1. 创建Q#库QuantumCode并在其中编写代码。

    比方说,您的代码有一个带有签名operation RunAlgorithm (bits : Int[]) : Int[]的入口点(即,它将整数数组作为参数,并返回另一个整数数组)。

  2. 创建一个F#应用程序(为简单起见,使它成为针对.NET Core的控制台应用程序)FsharpDriver

  3. 在F#应用程序中添加对Q#库的引用。

  4. 安装NuGet软件包Microsoft.Quantum.Development.Kit,它将对F#应用程序添加Q#支持。

    您将不会在FsharpDriver中编写任何Q#代码,但是您将需要使用QDK提供的功能来创建量子模拟器以运行您的量子代码,并定义用于传递的数据类型。量子程序的参数。

  5. 用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#,所有步骤都相同)。