如何在 Q# 中创建新类型操作?
How to create a newtype operation in Q#?
我正在使用 Q# 开发通用的 grover 搜索实现,我想定义一个自定义 Oracle 类型
newtype ModelOracle = ((Qubit[], Qubit[], Int[], Qubit) => Unit);
// ...
function GroverMaxMatchingOracle(search_set: (Int,Int)[], vertices: Int[], marked_pts: Bool[]): ModelOracle {
return ModelOracle(ApplyMaxMatchingOracle(_,_,_,_,search_set, vertices, marked_pts));
}
这将适合我的模型。但是当我尝试使用它时(有点像他们在 DatabaseSearch 示例中使用 StateOracle
的方式),我收到一条错误消息,指出新类型 ModelOracle
不是有效操作
fail: Microsoft.Quantum.IQSharp.Workspace[0]
QS5021: The type of the expression must be a function or operation type. The given expression is of type OracleHelper.ModelOracle.
我对这里的类型有什么误解?
看起来你已经定义好了,所以你可能必须先用 !
运算符解包用户定义的类型。
因此,在使用它的地方,您可能必须执行 GroverMaxMatchingOracle!(...)
之类的操作
另一种方法是在您的 UDT 中命名元组:
newtype ModelOracle = (Apply: (Qubit[], Qubit[], Int[], Qubit) => Unit);
然后无论你想在哪里使用它,你都可以直接使用命名项目 Apply
像这样:GroverMaxMatchingOracle::Apply(...)
如果有用的话,书中有一节关于用户定义类型 (8.2) @cgranade and I are working on, Learn Quantum Computing with Python and Q#
我正在使用 Q# 开发通用的 grover 搜索实现,我想定义一个自定义 Oracle 类型
newtype ModelOracle = ((Qubit[], Qubit[], Int[], Qubit) => Unit);
// ...
function GroverMaxMatchingOracle(search_set: (Int,Int)[], vertices: Int[], marked_pts: Bool[]): ModelOracle {
return ModelOracle(ApplyMaxMatchingOracle(_,_,_,_,search_set, vertices, marked_pts));
}
这将适合我的模型。但是当我尝试使用它时(有点像他们在 DatabaseSearch 示例中使用 StateOracle
的方式),我收到一条错误消息,指出新类型 ModelOracle
不是有效操作
fail: Microsoft.Quantum.IQSharp.Workspace[0]
QS5021: The type of the expression must be a function or operation type. The given expression is of type OracleHelper.ModelOracle.
我对这里的类型有什么误解?
看起来你已经定义好了,所以你可能必须先用 !
运算符解包用户定义的类型。
因此,在使用它的地方,您可能必须执行 GroverMaxMatchingOracle!(...)
另一种方法是在您的 UDT 中命名元组:
newtype ModelOracle = (Apply: (Qubit[], Qubit[], Int[], Qubit) => Unit);
然后无论你想在哪里使用它,你都可以直接使用命名项目 Apply
像这样:GroverMaxMatchingOracle::Apply(...)
如果有用的话,书中有一节关于用户定义类型 (8.2) @cgranade and I are working on, Learn Quantum Computing with Python and Q#