Есть такая задачка: посчитать расстояние(просто модуль разности) между элементами списка.
Т.е. для [1,5,10] получить [4,9,5].
С явной рекурсией можно сделать так:
allDistances [] acc = acc
allDistances (x:xs) acc = allDistances xs (acc ++ distances x xs)
where distances x ys = map (\y -> abs (x-y)) ys
Можно ли переписать это без использования явной рекурсии?
Вариант через foldl не привел к нужным результатам:
allDistances xs = foldl step [] xs
where step ys x = ys ++ distances x xs
distances x ys = map (\y -> abs (x-y)) ys
т.к. здесь xs — весь список, а мне нужно хвост при каждом вызове получать.