Ex 2.41
(define (triples n) (let ((1..n (enumerate-interval 1 n))) (flatmap (lambda (i) (flatmap (lambda (j) (map (lambda (k) (list i j k) (filter (lambda (x) (and (not (= i x)) (not (= j x)))) 1..n)) (filter (lambda (x) (not (= i x))) 1..n)) 1..n))) (define (eq-sum? s triple) (= s (fold-right + 0 triple))) (define (eq-from-triple s n) ; 探索手続き本体 (filter (lambda (x) (eq-sum? s x)) (triples n)))