如何从 F# 调用 Q# 操作

How to call Q# operations from F#

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

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

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

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

步骤是:

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

    假设您的代码有一个带有签名 operation RunAlgorithm (bits : Int[]) : Int[] 的入口点(即,它接受一个整数数组作为参数,returns 另一个整数数组)。

  2. 创建一个 F# 应用程序(为简单起见,我们将其设为针对 .NET Core 的控制台应用程序)FsharpDriver.

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

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

    您不会在 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#,所有步骤都是相同的)。