В этом вопросе: Как в F# создать выражение с типом Func‹obj›? показано, что однозначное лямбда-выражение автоматически приводится/преобразуется в тип Func, а затем принимается в функции.
Я работаю с библиотекой MathNet.Numerics и могу подтвердить это, интегрировав x^2 между 0 и 10:
#r "../packages/MathNet.Numerics.3.20.0/lib/net40/MathNet.Numerics.dll"
#r "../packages/MathNet.Numerics.FSharp.3.20.0/lib/net40/MathNet.Numerics.FSharp.dll"
#load "Library1.fs"
open Library3
// Define your library scripting code here
open MathNet.Numerics.Integration
let integral = DoubleExponentialTransformation.Integrate((fun x -> x**2.0), 0.0, 10.0, 1.0)
val answer : float = 333.3333333
Однако я не могу заставить это работать с несколькими функциями. Когда я пытаюсь это сделать, я получаю ошибку типа. Кто-нибудь знает обходной путь для этого?
open MathNet.Numerics.Optimization
open MathNet.Numerics.LinearAlgebra.Double
let newAnswer = BfgsSolver.Solve(DenseVector[|1.0, 1.0|],
(fun x y -> (x + y - 5.0) ** 2.0 + (y - x*x - 4.0) ** 2.0),
(fun x y -> DenseVector[| 2.0 * (x + y - 5.0) - 4.0 * x * (y - x*x - 4);
2.0 * (x + y - 5.0) + 2.0 * (y - x*x - 4.0) |])
)
и получаю следующую ошибку...
Script.fsx(20,34): error FS0193: Type constraint mismatch. The type
''a -> 'b -> 'c'
is not compatible with type
'System.Func<MathNet.Numerics.LinearAlgebra.Vector<float>,float>'
fun (x, y) ->
вместоfun x y ->
Не за компьютером, позже преобразуется в ответ. - person CaringDev   schedule 08.08.2017IEnumerable.Aggregate
- person TheQuickBrownFox   schedule 08.08.2017