在尝试将以下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#相关的数值优化材料感到有些惊讶。
答案 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并且无法对此进行语法检查,但我希望这个想法很明确。