Haskell: переписать без явной рекурсии
От: Danila_a Россия http://ib-soft.ru
Дата: 06.04.12 03:20
Оценка:
Есть такая задачка: посчитать расстояние(просто модуль разности) между элементами списка.
Т.е. для [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 — весь список, а мне нужно хвост при каждом вызове получать.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.