У меня простая проблема, и поскольку я новичок F #, я не могу понять, как это сделать. У меня есть список кортежей:Начальное состояние в F # List.scan
let l = [ (a, 2); (b, 3); (c, 2); (d, 6) ]
, что я хочу, чтобы превратиться в это:
let r = [ (a, 2); (b, 5); (c, 7); (d, 13) ]
Это просто добавляет значения второго элемента в каждом наборе: 2 + 3 + 2 + 6
. Объекты a
, b
, c
и d
являются сложными объектами, которые я просто хочу сохранить.
Я думал, что должен использовать List.scan
. Она принимает список, нить аккумулятора через вычисление и возвращает список:
let r = l |> List.scan (fun (_, s) (o, i) -> (o, s + i)) (??, 0) |> List.tail
Но я не знаю, что заполнить для знаков вопроса. Меня не интересует начальное состояние, за исключением 0
. И я не хочу указывать некоторый «пустой» экземпляр первого элемента кортежа.
Или есть более простой способ сделать это?
Это вид простого решения я искал. Благодарю. Я раньше не сталкивался с оператором ||>, но я полагаю, он просто передает два операнда в выражение? –
Да, это оператор двойного конвейера, определенный как: let (||>) (a, b) f = f a b – desco