F# 函数接受太多参数或在不期望的上下文中使用

F# function takes too many arguments or used in a context not expected

我正在尝试实现一个成本函数,我目前有

let computeCost (X : Matrix<double>) (y : Vector<double>) (theta : Vector<double>) =
    let m = y.Count |> double
    let J = (1.0/(2.0*m))*(((X*theta - y) |> Vector.map (fun x -> x*x)).Sum)
    J

出于某种原因,我在第一个 * 说 "This function takes too many arguments, or is used in a context where a function is not expected."

后的一半出现错误

然而,当我这样做时

let computeCost (X : Matrix<double>) (y : Vector<double>) (theta : Vector<double>) =
    let m = y.Count |> double
    let J = (((X*theta - y) |> Vector.map (fun x -> x*x)).Sum)
    J

它工作得很好,它说 val J:float 这正是我所期望的。但是一旦添加第二部分,即 (1.0/(2.0*m)) 部分,我就会收到错误消息。我在所有内容周围都加上了括号,所以我看不出它是如何应用某些部分函数或类似的东西的。我确定这很愚蠢,但我似乎无法弄明白。

没关系,我很笨,我又回到了 C# 中使用 .Sum() 的方式。实际的使用方式是

let computeCost (X : Matrix<double>) (y : Vector<double>) (theta : Vector<double>) =
    let m = y.Count |> double
    let J = (1.0/(2.0*m)) * (((X*theta - y) |> Vector.map (fun x -> x*x)) |> Vector.sum)
    J

这似乎解决了问题。