val hamming = 1 # merge( map((2*), hamming), merge(map((3*), hamming), map((5*), hamming)) ) def merge( inx@x:_, iny@y:_ ) | x < y = x # merge( inx.tail(), iny ) | x > y = y # merge( inx, iny.tail() ) | otherwise = merge( inx, iny.tail() ) println( hamming.take(20) ) println( hamming(1690) ) println( hamming(2000) )