Blob


1 (defun enumerate-interval (low high)
2 (if (> low high)
3 nil
4 (cons low (enumerate-interval (1+ low) high))))
5 (defun flatpmap (proc seq)
6 (accumulate #'append nil (mapcar proc seq)))
7 (defun sum (lst)
8 (accumulate #'+ 0 lst))
9 (defun prime-sum? (pair)
10 (prime? (sum pair)))
11 (defun make-pair-sum (pair)
12 (list (car pair) (cadr pair) (sum pair)))
13 (defun unique-pairs (n)
14 (flatmap
15 (lambda (i)
16 (mapcar (lambda (j) (list i j))
17 (enumerate-interval 1 (1- i))))
18 (enumerate-interval 1 n)))
19 (defun prime-sum-pairs (n)
20 (mapcar
21 #'make-pair-sum
22 (filter #'prime-sum? (unique-pairs n))))