Ищите библиотечную функцию F #, похожую на карту, которая передаст текущему состоянию вычислений - PullRequest
1 голос
/ 03 сентября 2011

Интересно, есть ли какая-нибудь функция в библиотеках F #, подобная этой?

let map_acc (f:int->int) (list:int list) =
  let rec map_acc' f acc = function
    | []   -> []
    | h::t -> (f (h+acc))::(map_acc' f (h+acc) t)
  map_acc' f 0 list

Использование:

let xxx = map_acc id [1..10]

val xxx : int list = [1; 3; 6; 10; 15; 21; 28; 36; 45; 55]

Ее назначение очень похоже на mapно оно передает текущее состояние (в данном случае, аккумулятор) каждому элементу списка.

1 Ответ

6 голосов
/ 04 сентября 2011

Да, List.scan - это отсутствующий ключ, который вы ищете:

[1..10]
|> List.scan (+) 0
|> List.tail //skip the seed value, 0
|> List.map id //of course, map id is not useful, but just illustration here
...