Решение упражнения 2.40 из SICP
Процедура 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