转换C#'使用' F#的关键字

时间:2016-08-20 19:17:24

标签: f# c#-to-f# ilnumerics

在尝试将以下C#代码翻译为F#时,我正在努力使用'使用'关键词。以下代码段来自ILNumerics库。如何翻译以下内容?

ILRetArray<double> ObjFuncBFGS2D(ILInArray<double> X) {
    using (ILScope.Enter(X)) {
        return X[0] * X[0] + X[1] * X[1] + 2; 
    }
} 

另外,F#人们倾向于使用哪些库进行优化?我一直在使用NLoptNet,但是在Matlab,Julia和Python中正确收敛的例程存在非常奇怪的收敛问题。所以问题在于我的F#翻译(更有可能授予)或优化库。这就是我希望确定的内容。坦率地说,我对互联网上缺乏与F#相关的数值优化材料感到有些惊讶。

1 个答案:

答案 0 :(得分:8)

The MSDN documentation on resource management in F#与此相关。要自动处理,F#中的常用方法是:

  • use,取代let并在绑定超出范围后处置
  • using,一个函数,在完成时将资源置于处理状态,在处理之前执行函数,将一次性对象作为输入。

use的代码可能如下所示:

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

或者,使用using,就像这样:

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

我没有使用ILNumerics并且无法对此进行语法检查,但我希望这个想法很明确。