Решение упражнения 2.40 из SICP

31 January, 2008 (22:45) | Решения упражнений

Процедура unique-pairs определяется способом, описанным в тексте параграфа:

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

Теперь процедуру prime-sum-pairs легко определить таким образом, чтобы она генерировала все уникальные пары, фильтровала их, оставляя только пары с простой суммой, а затем строила тройки (слагаемое, слагаемое, сумма) по этим парам:

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

Вот и все.

Comments

Comment from Vlad
Date: July 31, 2008, 5:26 pm

В книге диапазон значений элементов пар задан как 1<=j<i<=n, следовательно пары следует генерировать в интервале [1,n], а не [1,n), как в Вашей реализации. Правельный код:

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

Write a comment