Подходить к проблеме рекурсивно.Добавьте число к первому элементу списка, затем вернитесь к хвосту списка со следующим большим номером.Повторяйте, пока у вас нет чисел.Вместо увеличения b
вы начинаете новый вызов функции, в котором b
имеет большее значение.
adding [] _ = []
adding (x:xs) b = x + b : adding xs (b+1)
В качестве примера рассмотрим
adding [7, 10, 7, 5] 0 == 7 + 0 : adding [10, 7, 5] 1
== 7 : (10 + 1 : adding [7, 5] 2)
== 7 : 11 : (7 + 2 : adding [5] 3)
== 7 : 11 : 9 : (5 + 3 : adding [] 4)
== 7 : 11 : 9 : 8 : []
== [7, 11, 9, 8]
Вы можете заменить 0
с любым начальным значением n
в начальном вызове;рекурсивный вызов всегда увеличивает его.