2014-11-13 2 views
0

У меня возникли некоторые проблемы, которые снова преобразуют список списков. У меня есть список списков ints, это выглядит так.Тип вывода с List.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)) 

Кажется, проблема в том, что она выводит тип acc и elem быть типа int list, который не является правильным. Я не понимаю, почему List.sum, который в основном делает то же самое, кроме того, что он возвращает сумму всех чисел, работает, но моя папка не будет.

ответ

4

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

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

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

+1. Да, вы совершенно правы, это исправлено. Большое спасибо! –