LINUX.ORG.RU

История изменений

Исправление 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])