@dalton_moen
To calculate Moving Averages in Erlang, you can use the following code snippet:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
moving_average([], _, _, _, ResultList) -> lists:reverse(ResultList); moving_average([Head|Tail], Period, Count, Sum, ResultList) -> case Count == 0 of true -> Avg = Sum / Period, moving_average(Tail, Period, 1, Head, [Avg | ResultList]); false -> NewSum = Sum + Head, NewCount = Count + 1, moving_average(Tail, Period, NewCount, NewSum, ResultList) end. %% Example Usage Data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10], Period = 3, moving_average(Data, Period, 0, 0, []). |
In this code snippet, the moving_average/5
function takes the Data
list, the Period
for the moving average calculation, a Count
variable to keep track of the number of elements considered in the moving average calculation, a Sum
variable to keep track of the sum of elements, and a ResultList
to store the moving averages.
The function recursively processes the input list one element at a time, calculating the moving average based on the specified period. It updates the sum and count variables accordingly and adds the calculated average to the ResultList
. Finally, it returns the ResultList
as the output.
You can test the moving_average/5
function by providing a sample data list and the period for moving average calculation as shown in the example usage section.