13 May 2015
C#, F#, Maths, QSharp, Quantum Computing
Getting started with QSharp is easy. All that is required is firing up your favourite compiler, adding in the library reference, writing some code, and viewing the output.
Using Microsoft's excellent Visual Studio 2013, you will need to complete the following steps:
If you haven't installed Nuget yet, then you can do so by visiting https://www.nuget.org/ where you will find the relevant instructions and files you will need to compelted the installation.
Nuget simplifies library distribution and maintenance. There is now no need to visit a vendor's site and obtain updated assembly information, as Nuget will advise you that package updates are available. Nuget also simplifies searching for a specific framework. Some of you might have found QSharp this way, by simply searching Nuget for 'quantum computing'.
Within Visual Studio, select File, New, Project, choose your language, project type, give the project a name, and click OK. In the following example, I have chosen to create a new Console Application using the C# language.
Once your new project has been created, you can add in the QSharp library reference. To do this, right click on the References node in your project, and select Manage Nuget Packages.
Select Online, nuget.org, the search for QSharp.
Once the package has been located, click Install - the package will now be downloaded and the reference will be added into the project. You will now be able to access types made available within the QSharp assembly.
Now that the project and references have been setup, it's time to write some code. Generally, this process will involve creating a register, executing some command against the register, and viewing the output. Here is a sample project that performs the tasks outline above.
Using C#
#region Using References using System; using QSharp.Mathematics; #endregion namespace Example001GettingStarted { public class Program { public static void Main(string[] Arguments) { // Construct a register, prepared with 3 random qubits Register oRegister = new Register(3); // Write the state vector to the console WriteStateVector(oRegister); // Ensure the register is normalised // A register prepared with random qubits is guaranteed to be normalised if (oRegister.IsNormalised() == false) { oRegister.Normalise(); } // Construct a NOT gate PauliXGate oPauliXGate = new PauliXGate(); // Apply the NOT gate oRegister.StateVector = oPauliXGate.ApplyTo(1, oRegister); // Write the state vector to the console WriteStateVector(oRegister); } private static void WriteStateVector(Register Register) { // Control the output further using these flags bool bIsShowAlgebraicValues = true; bool bIsShowCoefficientValues = true; Console.WriteLine(); foreach (ComputationalBasisState oComputationalBasisState in Register.StateVector) { // By default, both algebraic and coefficient values are displayed - this can be confusing Console.WriteLine(oComputationalBasisState); // Use the overload to control the output // Console.WriteLine(oComputationalBasisState.ToString(bIsShowAlgebraicValues, bIsShowCoefficientValues)); } Console.WriteLine(); } } }
Using F#
namespace Example001GettingStarted open System open QSharp.Mathematics type Program() = [<EntryPoint>] static let main argv = // Construct a register, prepared with 3 random qubits let oRegister = new Register(3) // Write the state vector to the console Program.WriteStateVector(oRegister) // Ensure the register is normalised // A register prepared with random qubits is guaranteed to be normalised if oRegister.IsNormalised() = false then oRegister.Normalise() // Construct a NOT gate let oPauliXGate = new PauliXGate(); // Apply the NOT gate oRegister.StateVector <- oPauliXGate.ApplyTo(1, oRegister); // Write the state vector to the console Program.WriteStateVector(oRegister); 0 // return an integer exit code static member WriteStateVector(register: Register) = // Control the output further using these flags let bIsShowAlgebraicValues = true; let bIsShowCoefficientValues = true; printfn "" for oComputationalBasisState in register.StateVector do // By default, both algebraic and coefficient values are displayed - this can be confusing let sComputationalBasisState = oComputationalBasisState.ToString() // Use the overload to control the output // let sComputationalBasisState = oComputationalBasisState.ToString(bIsShowAlgebraicValues, bIsShowCoefficientValues) printfn "%s" sComputationalBasisState printfn ""
Copyright © 2025 carlbelle.com