0votos

Enumerar las factorizaciones de todos los naturales en Haskell

por josejuan hace 4 meses

Como función recursiva de la aplicación infinita de los primos con ellos mismos.

Enumerar las factorizaciones de todos los naturales

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
natFacts :: Integral a => [(a, [a])] 
natFacts = (1,[1]): rec 
  where rec = lazyMergeLists [[(q * p, p:fs) | (q, fs@(f:_)) <- natFacts, f <= p] | p <- primes] 
 
-- ya está 
 
 
 
 
 
 
-- debería estar por ahí 
lazyMergeLists :: Ord a =>[[a]] ->[a] 
lazyMergeLists (x:xs) = nubOrd $ s xs $ insert (x, True) empty 
  where s xs q = case extractMin q of 
                   Just ((y:ys, False), q') -> y: (s       xs  $ insert (ys, False) q'                         ) 
                   Just ((y:ys, True ), q') -> y: (s (tail xs) $ insert (ys, False) $ insert (head xs, True) q') 
                   _                        -> error "infinite lists expected" 

Comenta la solución

Tienes que identificarte para poder publicar tu comentario.