Как вызвать Q # операции из F#

#f# #q#

#f# #q#

Вопрос:

Я хочу написать квантовую программу на F #, но я не знаю, как вызвать операции Q # из F #. Как именно я мог бы это сделать?

Я попытался сначала прочитать версию C #, но, похоже, она плохо переводится на F #.

Ответ №1:

TL; DR: Вам нужно создать проект библиотеки Q # (который выдаст .csproj проект, содержащий только файлы Q #) и ссылаться на него из чисто F #-приложения.

Вы не можете смешивать F # и Q # в одном проекте, потому что это не будет компилироваться: Q # компилируется в C # для локального моделирования, и вы не можете использовать C # и F # в одних и тех же проектах. Однако у вас могут быть два отдельных проекта на разных языках, которые оба компилируются в MSIL и могут ссылаться друг на друга.

Шаги следующие:

  1. Создайте библиотеку Q # QuantumCode и напишите в ней свой код.

    Допустим, ваш код имеет точку входа с сигнатурой operation RunAlgorithm (bits : Int[]) : Int[] (т. Е. он принимает массив целых чисел в качестве параметра и возвращает другой массив целых чисел).

  2. Создайте приложение на F # (для простоты давайте сделаем его консольным приложением, ориентированным на .NET Core) FsharpDriver .

  3. Добавьте ссылку на библиотеку Q # в приложение F #.

  4. Установите пакет NuGet Microsoft.Quantum.Разработка.Комплект, который добавляет поддержку Q # в приложение F #.

    Вы не будете писать никакого кода на Q # FsharpDriver , но вам нужно будет использовать функциональность, предоставляемую 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
      

Я разместил полный пример кода проекта здесь (первоначально в этом проекте рассматривалось использование Q # из VB.NET , но для F # все шаги одинаковы).