使用List.fold键入推断

时间:2014-11-13 09:10:56

标签: f# type-inference fold

我有一些问题会再次改变列表列表。我有一个列表,它看起来像这样。

val p5PrimeFactorization : int list list =
  [[1]; [2]; [3]; [2; 2]; [5]; [3; 2]; [7]; [2; 2; 2]; [3; 3]; [5; 2]; [11];
   [3; 2; 2]; [13]; [7; 2]; [5; 3]; [2; 2; 2; 2]; [17]; [3; 3; 2]; [19];
   [5; 2; 2]] 

现在我想将每个列表转换为所有条目的产品。现在这个工作

[for n in 2..20 -> primeFactors n 2 []]
|> List.map (List.sum)

但这不是..

[for n in 2..20 -> primeFactors n 2 []]
|> List.map (List.fold (fun acc elem -> acc * elem))

似乎问题在于它将accelem的类型推断为int list类型,这是不正确的。我不明白为什么List.sum基本上做同样的事情,除了它返回所有数字的总和,工作,但我的文件夹不会。

1 个答案:

答案 0 :(得分:4)

在第二个示例中,您尚未指定折叠的初始值。

你可能意味着像

|> List.map (List.fold (fun acc elem -> acc * elem) 1)