簡體   English   中英

為什么 Q# 沒有檢測到 F# 或 C# 命名空間?

[英]Why Q# does not detect either F# or C# namespace?

我正在 Q# 中創建一個庫,並嘗試將項目引用添加到我編寫的 F#(或 C#)庫。 但它不起作用。

添加適當的引用后,我檢查了我的 Q# project.csproj 文件,我可以看到引用已添加到那里,這意味着添加過程已正確完成。 但是當我嘗試運行代碼時,我收到以下消息:“錯誤 QS6104:不存在具有該名稱的命名空間”,它指的是包含該 F#(或 C#)庫的名稱的行。 我想知道為什么會這樣。 是不是因為 Q# 和 F# 之間存在一些根本差異,但 Q# 是基於 F# 和 C# 創建的,因此有什么解決方案可以解決這個問題嗎? 這是我的代碼片段:

    namespace MyQSharpLibrary
    {
        open Microsoft.Quantum.Canon;
        open Microsoft.Quantum.Intrinsic;
        open MyFSharpLib;
        ...
        ...
    }

MyFSharpLib 是我在 F# 中定義的庫,在“MyQSharpLibrary”中添加對它的引用后,我可以在 MyQSharpLibrary.csproj 中看到以下 markdown 代碼:

    <Project Sdk="Microsoft.NET.Sdk">
      ...
      ...
       <ItemGroup>
        <ProjectReference Include="..\MyFSharpLib\MyFSharpLib.fsproj"/>
       </ItemGroup>  
    </Project>

但在運行 MyQSharpLibrary 后,我收到錯誤消息:“錯誤 QS6104:不存在具有該名稱的命名空間”,它指的是包含“open MyFSharpLib;”的行

Q# 中的open指令只允許您導入 Q# 代碼,而不是 F# 或 C# 代碼。 Q# 通常不允許執行任意經典代碼,因為它被設計為在通常可能不具備此能力的量子設備上執行。


如果您正在尋找一種可以在模擬中完成但不能移植到量子設備的解決方法,您可以編寫一個模擬器來擴展現有的一個模擬器,並向 Q# 代碼公開新的內在函數來實現您的經典計算。

例如,看看 Quantum Katas 是如何收集有關程序執行的統計信息的:它們定義了CounterSimulator實現了諸如 GetOracleCallsCount 之類的內在函數,以及GetOracleCallsCount中的匹配 Q# 代碼, 它將它們暴露給 Q# 代碼。 然后將此項目作為依賴項添加到需要此功能的 katas,例如DeutschJozsaAlgorithm - 您將在DeutschJozsaAlgorithm.csproj文件中看到項目引用以及匹配的open Quantum.Kata.Utils; Tests.qs中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM