Как вызвать операции Q # из F # - PullRequest
4 голосов
/ 24 марта 2019

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

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

1 Ответ

6 голосов
/ 24 марта 2019

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.Development.Kit, который добавляет поддержку 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 # все шаги одинаковы).

...