(define (enumerate-interval x n)
(if (> x n) null (cons x (enumerate-interval (+ x 1) n))))
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
(define (filter condition seq)
(accumulate (lambda (x y) (if (condition x) (cons x y) y))
null
seq))
(define (flatmap proc seq)
(accumulate append null (map proc seq)))
(define (unique-three n)
(flatmap
(lambda (i)
(flatmap
(lambda (j)
(map (lambda (k) (list i j k))
(enumerate-interval 1 (- j 1))))
(enumerate-interval 1 (- i 1))))
(enumerate-interval 1 n)))
(define (ex_2_41 n s)
(accumulate
(lambda (x y)
(if (= s (+ (car x) (car (cdr x)) (car (cdr (cdr x)))))
(cons x y) y))
null
(unique-three n)))
(ex_2_41 10 17)
(ex_2_41 15 27)