Recursion Deedle-具有初始值的序列上的递归映射

Recursion Deedle-具有初始值的序列上的递归映射,recursion,f#,deedle,Recursion,F#,Deedle,我试图从同一类型的现有时间序列创建一个新的时间序列(序列[DateTime,float]),其中新序列的映射是递归的,例如: NewSeries_T = NewSeries_T-1 + constant * OldSeries_T; 我将“NewSeries_0=1”作为新系列的初始化值 我正试图编写一个Series.map函数来完成这项工作-我已经得到了以下非工作代码,但我无法理解递归部分: let rec newSeries = existingSeries |> Series.ma

我试图从同一类型的现有时间序列创建一个新的时间序列(序列[DateTime,float]),其中新序列的映射是递归的,例如:

NewSeries_T = NewSeries_T-1 + constant * OldSeries_T;
我将“NewSeries_0=1”作为新系列的初始化值

我正试图编写一个Series.map函数来完成这项工作-我已经得到了以下非工作代码,但我无法理解递归部分:

let rec newSeries = existingSeries |> Series.map (fun k v ->     
match k.Equals(initDate) with
| true -> 1
| false -> newSeries.LastValue() + constant * v
)
所以,我认为关键是,我如何允许函数访问序列中的“previous”值,以递归方式构建它


编辑-移动到下面的答案。基于Fyodor的reccomendation-Series.scanValues正是我所需要的:

let initalEntry = Series([initDate], [init])

let newSeries= 
    existingSeries 
    |> Series.filter (fun k v -> k.Equals(initDate) = false) 
    |> Series.scanValues (fun n x-> lambda * n + (1.0 - lambda) * x ) init

newSeries.Merge(initalEntry)

我去掉了第一个值,因为我希望它在本系列开始时返回“init”值,并在末尾将其合并回来。

查看
系列。scanValues
。非常感谢!“这就把我带到了我需要去的地方。”卡尔文克斯,你为什么不想写一个答案?