そういえば
1
昔作った「3つの数のうちから大きい数2つの和を返す」というような関数ってもっと一般的に定義できる。
(use pre-sicp) (define (f n . seq) (define (select seq count) (if (= count n) '() (cons (car seq) (select (cdr seq) (+ count 1))))) (accumulate + 0 (select (reverse (sort seq)) 0))) (define (sum-max2-of-3 x y z) (f 2 x y z)) ; gosh> (sum-max2-of-3 3 4 5) ; 9 ; gosh> (sum-max2-of-3 2 2 2) ; 4 ; gosh> (sum-max2-of-3 -3 -1 10) ; 9
2
accumulate-nのために作ったようなものも
(define (g n max) (map (lambda (x) (enumerate-interval x (+ x (- n 1)))) (filter (lambda (y) (= 1 (remainder y n))) (enumerate-interval 0 max)))) ; gosh> (g 3 12) ; ((1 2 3) (4 5 6) (7 8 9) (10 11 12))