Я хотел бы рассчитать разницу последовательных элементов в числовом списке, например, input = [1, 2, 3, 5]
должен выдавать [-1, -1, -2]
.
Я придумал два способа, которые кажутся более или менее сложными. Есть ли более простой идиоматичный способ сделать это?
Использование почтового индекса:
Enum.zip(input, Enum.drop(input,1))
|> Enum.map(fn {x,y} -> x-y end)
Использование сканирования (слишком сложное):
Enum.scan(input, [0, 0], fn x, [_delta, prev] -> [prev-x, x] end)
|> Enum.map(fn [x, _y] -> x end)
|> Enum.drop(1)