Skip to content

2.40

; Define a procedure unique-pairs that, given an integer n, generates the sequence 
; of pairs (i, j) with 1 ≤ j < i ≤ n. Use unique-pairs to simplify the definition 
; of prime-sum-pairs given above.

; Define helpers
(define nil '())
(define (enumarate-interval low high)
    (if (> low high)
        nil
        (cons low (enumarate-interval (+ low 1) high))))
(define (accumulate op initial sequence)
    (if (null? sequence) 
        initial
        (op (car sequence) (accumulate op initial (cdr sequence)))))
(define (flatmap proc seq)
    (accumulate append nil (map proc seq)))

; Construct `unique-pairs` procedure
(define (unique-pairs n)
    (flatmap
        (lambda (i)
            (map 
                (lambda (j) (list i j))
                (enumarate-interval 1 (- i 1))))
        (enumarate-interval 1 n)))

(unique-pairs 6)
;Value 2: ((2 1) (3 1) (3 2) (4 1) (4 2) (4 3) (5 1) (5 2) (5 3) (5 4) (6 1) (6 2) (6 3) (6 4) (6 5))