問題2.41 – SICP(計算機プログラムの構造と解釈)その56
2009年01月01日
問題2.41
(define (unique-trio 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 (sum-of-trio trio) (+ (car trio) (cadr trio) (cadr (cdr trio)))) (define (equal-sum-of-trio n s) (filter (lambda (x) (= (sum-of-trio x) s)) (unique-trio n))) (unique-trio 6) gosh> ((3 2 1) (4 2 1) (4 3 1) (4 3 2) (5 2 1) (5 3 1) (5 3 2) (5 4 1) (5 4 2) (5 4 3) (6 2 1) (6 3 1) (6 3 2) (6 4 1) (6 4 2) (6 4 3) (6 5 1) (6 5 2) (6 5 3) (6 5 4)) (equal-sum-of-trio 6 6) gosh> ((3 2 1)) (equal-sum-of-trio 6 8) gosh> ((4 3 1) (5 2 1)) (equal-sum-of-trio 6 12) gosh> ((5 4 3) (6 4 2) (6 5 1)) (equal-sum-of-trio 6 15) gosh> ((6 5 4)) (equal-sum-of-trio 6 16) gosh> ()
上記手続きで利用している他の手続き
(define (filter predicate sequence) (cond ((null? sequence) ()) ((predicate (car sequence)) (cons (car sequence) (filter predicate (cdr sequence)))) (else (filter predicate (cdr sequence))))) (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 (flatmap proc seq) (accumulate append () (map proc seq)))
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542