F# 不能在没有管道的情况下调用 Seq.fold?

F# can't invoke Seq.fold without piping?

我正忙于学习 F# 并在玩 Seq.fold。任何人都可以解释为什么以下两个调用本质上不相同,一个错误而另一个错误。

这样调用:

Seq.fold (fun state input -> state + input) 0 Seq.ofList [1;2;3;4;5];;

导致以下错误:

error FS0001: This expression was expected to have type
    ''a -> 'b'
but here has type
    'int'

使用管道调用工作正常:

Seq.ofList [1;2;3;4;5] |> Seq.fold (fun state input -> state + input) 0;;

我猜我以某种方式采用了通用函数并将其强制为 int。

您将 Seq.ofList 作为第三个参数传递给 Seq.fold。您需要添加一些括号:

Seq.fold (fun state input -> state + input) 0 (Seq.ofList [1;2;3;4;5]);;

Seq.ofList 不是强制性的。 可以直接写:

Seq.fold (fun state input -> state + input) 0 [1;2;3;4;5]

或:

[1;2;3;4;5] |> Seq.fold (fun state input -> state + input) 0