没有管道,F#无法调用Seq.fold?

时间:2017-08-22 06:48:46

标签: f# f#-interactive

我正在忙着学习F#并正在玩$('#street_1,#street_2').on('input', function(e){ let count=$(this).closest('div').find('span').eq(1); count.text($(this).value.length+'/'+ max); if ($(this).value.length>max) { count.css('color','red'); } else count.css('color','black'); }); 。任何人都可以解释为什么以下两个调用基本上不相同,一个错误而另一个没有。

以这种方式调用:

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'

我猜我以某种方式采用了泛型函数并强制它只是int。

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:3)

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