您的位置:首页 > 其它

SICP 习题2.41 triple 三元组

2016-06-29 21:38 253 查看

非常朴素的想法,找出所有的三元组,然后判定三元组的和是否与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))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: