История изменений
Исправление Miguel, (текущая версия) :
тогда ж `unfoldr` проще?
По-моему, нет. iterate и takeWhile заметно проще, и, когда можно обойтись ими, лучше обойтись.
Вот, скажем, числа Хэмминга считать — это да, тут unfoldr ближе всего будет.
hammings =
1 :
unfoldr
(\hss ->
let x = minimum $ map head hss in
Just (x, map (dropWhile (x ==)) hss))
(map (\n -> map (n *) hammings) [2,3,5])
Исходная версия Miguel, :
тогда ж `unfoldr` проще?
По-моему, нет. iterate и takeWhile заметно проще, и, когда можно обойтись ими, лучше обойтись.
Вот, скажем, числа Хэмминга считать — это да, тут unfoldr ближе всего будет.
hammings = 1 : unfoldr (\hss -> let x = minimum $ map fst hss in Just (x, dropWhile (x ==) hss)) (map (\n -> map (n *) hammings) [2,3,5])