2016-08-20 13 views
4

으로 변환 다음 C# 코드를 F #으로 변환하려고 할 때 'using'키워드로 고민하고 있습니다. 다음 스 니펫은 ILNumerics 라이브러리에 있습니다. 다음을 번역하는 방법?C# 'using'키워드를 F #

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

F #에'사용'(및'사용') – Sehnsucht

+4

기억한다면 '사용/사용'이 문제의 가장 적은 것입니다. ILNumerics는 C#에서 많은 방해물을 만들지 않지만 F #에서 명시 적 변환이 필요한 'ILArray','ILInArray' 및 'ILRetArray'사이의 많은 암시 적 변환을 사용합니다. 당신은 아마 어떤 일을 끝내기 위해 이들 사이에서 변환 할 수있는 도우미 함수들을 정의 할 필요가있을 것이다. – TheInnerLight

+0

@TheInnerLight F #에서 제한되거나 제약되지 않은 최적화 라이브러리를 다시 제안합니까? –

답변

8

The MSDN documentation on resource management in F#이 여기에 해당됩니다. 자동 폐기, F 번호에 일반적인 방법은 다음과 같습니다 완료 및 함수 때 let를 대체하고 처분

  • use, 바인딩이 범위
  • using 벗어나 일단 자원을받는 함수는 처분하기 처분하기 전에 실행해야하며, 처분 가능한 객체를 입력으로 사용합니다.

use와 코드는 다음과 같습니다

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

또는를 using로, 다음과 같이 : 나는 ILNumerics를 사용하지 않는

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

할 수있는 구문 확인하세요 그러나이 아이디어가 분명하기를 바랍니다.