packages feed

egison-3.10.0: sample/primes.egi

;;;
;;;
;;; Pattern-matching against sequence of natural numbers
;;;
;;;

;; Extract all twin primes from the infinite list of prime numbers with pattern-matching!
(define $twin-primes
  (match-all primes (list integer)
    [<join _ <cons $p <cons ,(+ p 2) _>>>
     [p (+ p 2)]]))

;; Enumerate the first 10 twin primes
(assert-equal "first 10 twin prime"
  (take 10 twin-primes)
  {[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!
(define $prime-triplets
  (match-all primes (list integer)
    [<join _ <cons $p
              <cons (& $m (| ,(+ p 2) ,(+ p 4)))
               <cons ,(+ p 6) _>>>>
     [p m (+ p 6)]]))

;; Enumerate the first 10 prime triplets
(assert-equal "first 10 prime triplets"
  (take 10 prime-triplets)
  {[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]})