非常朴素的想法,找出所有的三元组,然后判定三元组的和是否与s相等
(define (accumulate op initial sequence)
(if (null? sequence)
initial
(op (car sequence)
(accumulate op initial (cdr sequence)))))
(define (enumerate-interval low high)
(if (> low high) '() (cons low (enumerate-interval (+ low 1) high))))
(define (fliter predicate sequence)
(cond ((null? sequence) '())
((predicate (car sequence))
(cons (car sequence) (fliter predicate (cdr sequence))))
(else (fliter predicate (cdr sequence)))))
(define (flatmap proc seq)
(accumulate append '() (map proc seq)))
(define (remove item sequence)
(fliter (lambda (x) (not (= item x))) sequence))
(define (triple n)
(flatmap (lambda (i)
(flatmap (lambda (j) (map (lambda (k) (list i j k)) (remove i (remove j (enumerate-interval 1 n)))))
(remove i (enumerate-interval 1 n))))
(enumerate-interval 1 n)))
(define (n-triple-s n s)
(fliter (lambda (x)
(= (+ (car x) (cadr x) (caddr x)) s))
(triple n)))
(newline)
(display (n-triple-s 8 10))