SICP 2.41
mapのネストは何回見ても混乱する。式が入れ子になることも混乱を助長している。シェルのパイプのように見えると、私にとってわかりやすいのだが。
(define (make-unique-triples n) (define (flatmap proc lis) (fold-right append '() (map proc lis))) (define (remove x lis) (filter (lambda (y) (not (= x y))) lis)) (define (permutations s) (if (null? s) '(()) (flatmap (lambda (x) (map (lambda (p) (cons x p)) (permutations (remove x s)))) s))) (flatmap (lambda (i) (flatmap (lambda (j) (flatmap (lambda (k) (permutations (list i j k))) (iota (- j 1) 1))) (iota (- i 1) 1))) (iota n 1))) (make-unique-triples 4)