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