1 (define (smallest-divisor n)
3 (define (find-divisor n test-divisor)
4 (cond ((> (square test-divisor) n) n)
5 (( divides? test-divisor n) test-divisor)
6 (else (find-divisor n (+ test-divisor 1)))))
10 (= n (smallest-divisor n)))
11 (define (flatmap proc seq)
12 (accumulate append '() (map proc seq)))
13 (define (accumulate op initial seq)
17 (accumulate op initial (cdr seq)))))
18 (define (enumerate-interval low high)
21 (cons low (enumerate-interval (1+ low) high))))
22 (define (prime-sum? pair)
23 (prime? (+ (car pair) (cadr pair))))
24 (define (make-pair-sum pair)
25 (list (car pair) (cadr pair) (+ (car pair) (cadr pair))))
26 (define (prime-sum-pairs n)
34 (enumerate-interval 1 (- i 1)))
35 (enumerate-interval 1 n))))))
36 (define (permutations s)
40 (map (lambda (p) (cons x p))
41 (permutations (remove x s))))
43 (define (remove item sequence)
44 (filter (lambda (x) (not (= x item)))
46 (define (unique-pairs n)
51 (enumerate-interval 1 (- i 1))))
52 (enumerate-interval 1 n)))
53 (define (prime-sum-pairs n)