main :: [sys_message] main = [Stdout (table 5 10 nums), Stdout countmsg] where nums = filter additive_prime [1..500] countmsg = "Found " ++ show (#nums) ++ " additive primes < 500\n" table :: num->num->[num]->[char] table w c ls = lay [concat (map (rjustify w . show) l) | l <- split c ls] split :: num->[*]->[[*]] split n ls = [ls], if #ls < n = take n ls:split n (drop n ls), otherwise additive_prime :: num->bool additive_prime n = prime (dsum n) & prime n dsum :: num->num dsum n = n, if n<10 = n mod 10 + dsum (n div 10), otherwise prime :: num->bool prime n = n>=2 & #[d | d<-[2..entier (sqrt n)]; n mod d=0] = 0