Resource > SICP Exersise 2_40
(define (filter predicate sequence)
(cond ((null? sequence) '())
((predicate (car sequence))
(cons (car sequence)
(filter predicate (cdr sequence))))
(else (filter predicate (cdr sequence)))))
(define (make-pair-sum pair)
(list (car pair) (cadr pair) (+ (car pair) (cadr pair))))
;; 解答
(use srfi-1)
(define (uniq-sum-pairs n)
(define (unique? lis)
(not (equal? (car lis) (cadr lis))))
(map make-pair-sum
(filter unique?
(flatmap
(lambda (i)
(map (lambda (j) (list i j))
(iota (- i 1) 1)))
(iota n 1)))))
(use gauche.test)
(test-start "Exersise2.40")
(test* "1" '() (uniq-sum-pairs 1))
(test* "2" '((2 1 3)) (uniq-sum-pairs 2))
(test* "3" '((2 1 3) (3 1 4) (3 2 5)) (uniq-sum-pairs 3))
(test-end)