Ir para o conteúdo

Números Hamming

Este código tem o intuito de calcular a sequência infinita de números Hamming. A sequência de Hamming começa pelo número 1, os restantes valores são obtidos pela multiplicação de 2, 3 ou 5 por um número Hamming.

hamming = 1 : merge h2 (merge h3 h5)
   where h2 = map (2*) hamming
         h3 = map (3*) hamming
         h5 = map (5*) hamming

-- Une as várias listas infinitas de números de hamming.
-- Em caso de igualdade, ignora 1 dos números para não aparecer repetidos.
merge a@(x:xs) b@(y:ys) | x < y = x : merge xs b
                        | x == y = x : merge xs ys
                        | otherwise = y : merge a ys