Вывод типа с помощью List.fold

У меня возникли проблемы с преобразованием списка списков. У меня есть список списков ints, это выглядит так.

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 который в основном делает то же самое, кроме того, что он возвращает сумму всех чисел, работает, но моя папка не будет.

1 ответ

В вашем втором примере вы не указали начальное значение складки.

Вы, вероятно, имели в виду нечто вроде

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

licensed under cc by-sa 3.0 with attribution.