转换为C#和#x27;使用';关键字到F#

转换为C#和#x27;使用';关键字到F#,f#,c#-to-f#,ilnumerics,F#,C# To F#,Ilnumerics,在试图将下面的C代码翻译成F代码时,我正在努力使用“using”关键字。以下代码段来自库。如何翻译以下内容 ILRetArray<double> ObjFuncBFGS2D(ILInArray<double> X) { using (ILScope.Enter(X)) { return X[0] * X[0] + X[1] * X[1] + 2; } } ILRetArray ObjFuncBFGS2D(ILInArray X){ 使

在试图将下面的C代码翻译成F代码时,我正在努力使用“using”关键字。以下代码段来自库。如何翻译以下内容

ILRetArray<double> ObjFuncBFGS2D(ILInArray<double> X) {
    using (ILScope.Enter(X)) {
        return X[0] * X[0] + X[1] * X[1] + 2; 
    }
} 
ILRetArray ObjFuncBFGS2D(ILInArray X){
使用(ILScope.Enter(X)){
返回X[0]*X[0]+X[1]*X[1]+2;
}
} 
另一方面,F#人倾向于使用哪些库进行优化?我一直在使用NLoptNet,但在Matlab、Julia和Python中正确收敛的例程中存在非常奇怪的收敛问题。所以问题要么出在我的F#翻译(当然这更可能)上,要么出在优化库上。这就是我希望确定的。坦率地说,我有点惊讶于互联网上缺少与F#相关的数值优化材料。

与此相关。要自动处理,F#中的常用方法是:

  • use
    ,它将替换
    let
    ,并在绑定超出范围时进行处理
  • 使用
    ,这是一个函数,在完成时获取要处置的资源,以及一个在处置前执行的函数,该函数将一次性对象作为输入
带有
use
的代码可能如下所示:

let ObjFuncBFGS2D (X : ILInArray<double>) =
    use myEnteredScope = ILScope.Enter(X)
    X.[0] * X.[0] + X.[1] * X.[1] + 2
let ObjFuncBFGS2D (X : ILInArray<double>) =
    using (ILScope.Enter(X)) <| fun _ ->
        X.[0] * X.[0] + X.[1] * X.[1] + 2

我不使用ILNumerics,也不能进行语法检查,但我希望这个想法是清楚的。

F#让
使用
(和
使用
)如果我没记错的话,
使用/使用
是你最不容易遇到的问题。ILNumerics利用了
ILArray
ILInArray
ILRetArray
之间的大量隐式转换,这些转换在C中不会造成太多阻碍,但在F中需要显式转换。您可能需要定义一组辅助函数来在这些函数之间进行转换,以便完成任何事情。@TheInnerLight any Recommensions re-Constraint/UnConstraint optimization Library in F#?我认为F#是相对较新的(它被添加到VS2010中,但在F#3.0(即VS2012)中真正成为“主流”)。因此,在野外只有四年的时间,因此对于某些特定的用例,确实很少有可用的。这就是说,对于其他一些环境也是如此,例如,R在去年MS购买时获得了开箱即用的多核支持。熊猫也相当年轻。。特别是优化,库不会用F*来编写,而是用C++(或C和/或FORTRAN)编写。F#的优点是,它允许您包装这些内容以获得更好的用户体验。如果你能给出一些例子,与C#/python/matlab相比,NLoptNet在F#中的行为很奇怪,这是可以研究的。2.提供一些优化例程。还有极端优化(与ILNumerics一样是专有的)。我猜Math.Net缺少这些功能?