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)))