(load "2.36.txt") ; for accumulate (load "1.22.txt") ; for prime? (define (flatmap proc seq) (accumulate append '() (map proc seq))) (define (enumerate-interval s e) (if (> s e) '() (cons s (enumerate-interval (+ s 1) e)))) (define (unique-pairs n) (define (pairs-with i) (map (lambda (j) (list i j)) (enumerate-interval 1 (- i 1)))) (flatmap pairs-with (enumerate-interval 1 n))) (define (prime-sum? pair) (prime? (+ (car pair) (cadr pair)))) (define (make-pair-sum pair) (list (car pair) (cadr pair) (+ (car pair) (cadr pair)))) (define (prime-sum-pairs n) (map make-pair-sum (filter prime-sum? (unique-pairs n))))