F# 使用List.fold进行类型推断

F# 使用List.fold进行类型推断,f#,type-inference,fold,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]] 现在我想将每个列表转

我再次转换列表时遇到一些问题。我有一个整数列表,看起来像这样

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))

问题似乎在于它推断出
acc
elem
的类型是
int list
类型,这是不对的。我不明白为什么
List.sum
除了返回所有数字的总和外,它基本上做相同的事情,但我的文件夹不起作用。

在第二个示例中,您没有指定折叠的初始值

你的意思可能是

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

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

你的意思可能是

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