#f# #q#
#f# #q#
Вопрос:
Я хочу написать квантовую программу на F #, но я не знаю, как вызвать операции Q # из F #. Как именно я мог бы это сделать?
Я попытался сначала прочитать версию C #, но, похоже, она плохо переводится на F #.
Ответ №1:
TL; DR: Вам нужно создать проект библиотеки Q # (который выдаст .csproj
проект, содержащий только файлы Q #) и ссылаться на него из чисто F #-приложения.
Вы не можете смешивать F # и Q # в одном проекте, потому что это не будет компилироваться: Q # компилируется в C # для локального моделирования, и вы не можете использовать C # и F # в одних и тех же проектах. Однако у вас могут быть два отдельных проекта на разных языках, которые оба компилируются в MSIL и могут ссылаться друг на друга.
Шаги следующие:
-
Создайте библиотеку Q #
QuantumCode
и напишите в ней свой код.Допустим, ваш код имеет точку входа с сигнатурой
operation RunAlgorithm (bits : Int[]) : Int[]
(т. Е. он принимает массив целых чисел в качестве параметра и возвращает другой массив целых чисел). -
Создайте приложение на F # (для простоты давайте сделаем его консольным приложением, ориентированным на .NET Core)
FsharpDriver
. -
Добавьте ссылку на библиотеку Q # в приложение F #.
-
Установите пакет NuGet Microsoft.Quantum.Разработка.Комплект, который добавляет поддержку Q # в приложение F #.
Вы не будете писать никакого кода на Q #
FsharpDriver
, но вам нужно будет использовать функциональность, предоставляемую 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
Я разместил полный пример кода проекта здесь (первоначально в этом проекте рассматривалось использование Q # из VB.NET , но для F # все шаги одинаковы).