-- -- -- Pattern-matching against sequence of natural numbers -- -- -- Extract all twin primes from the infinite list of prime numbers with pattern-matching! twinPrimes := matchAll primes as list integer with | _ ++ $p :: #(p + 2) :: _ -> (p, p + 2) -- Enumerate the first 10 twin primes assertEqual "first 10 twin prime" (take 10 twinPrimes) [ (3, 5) , (5, 7) , (11, 13) , (17, 19) , (29, 31) , (41, 43) , (59, 61) , (71, 73) , (101, 103) , (107, 109) ] -- Extract all prime-triplets from the infinite list of prime numbers with pattern-matching! primeTriplets := matchAll primes as list integer with | _ ++ $p :: ($m & (#(p + 2) | #(p + 4))) :: #(p + 6) :: _ -> (p, m, p + 6) -- Enumerate the first 10 prime triplets assertEqual "first 10 prime triplets" (take 10 primeTriplets) [ (5, 7, 11) , (7, 11, 13) , (11, 13, 17) , (13, 17, 19) , (17, 19, 23) , (37, 41, 43) , (41, 43, 47) , (67, 71, 73) , (97, 101, 103) , (101, 103, 107) ]