Ex 2.40

(define (unique-pairs n)
  (flatmap (lambda (i)
             (map (lambda (j) (list i j))
                  (enumerate-interval 1 (- i 1))))
           (enumerate-interval 1 n)))

(define (prime-sum-pairs n)
  (map make-pair-sum (filter prime-sum? (unique-pairs n))))

flatmap 手続きは Haskell でいうところの concatMap なわけだな。 enumerate-interval のような手続きを定義することなしに [1..n] でリストを作れるあたり、 Haskell のほうが楽だなあとおもうことしきり。