問題2.40 – SICP(計算機プログラムの構造と解釈)その55
問題2.40 (define (unique-pairs n) (flatmap (lambda (i) (map (lambda (j) (list i j)) (enumerate-interval 1 (- i 1)))) (enumerate-interval 1 n))) (define (prime-sum-pairs n) (map make-pair-sum (filter pri…続きを読む
問題2.40 (define (unique-pairs n) (flatmap (lambda (i) (map (lambda (j) (list i j)) (enumerate-interval 1 (- i 1)))) (enumerate-interval 1 n))) (define (prime-sum-pairs n) (map make-pair-sum (filter pri…続きを読む
2.2.3 写像の入れ子 正の整数 n があり、1<=j<i<=n である異なる正の整数 i と j の順序対で、i+j が素数になるものをすべて見つける。 n = 6 の場合 i<=n の各整数に、整数 j<i を数え上げる。 (map (lambda (i) (enumerate-interval 1 (- i 1))) (enumerate-interval 1…続きを読む
問題2.39 (define (reverse sequence) (fold-right (lambda (x y) (append y (list x))) () sequence)) (reverse (list 1 2 3)) gosh> (3 2 1) (define (reverse sequence) (fold-left (lambda (x y) (append (list…続きを読む
問題2.38 fold-right と fold-left 手続き (define (fold-right op initial sequence) (if (null? sequence) initial (op (car sequence) (fold-right op initial (cdr sequence))))) (define (fold-left op initial seque…続きを読む
問題2.37 accumulate 手続きと accumulate-n 手続き (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (accumulate-n op init…続きを読む
問題2.36 (define (accumulate-n op init seqs) (if (null? (car seqs)) () (cons (accumulate op init (map car seqs)) (accumulate-n op init (map cdr seqs))))) (define items (list (list 1 2 3) (list 4 5 6) (l…続きを読む
問題2.35 (map <??> <??>) 部分でリストの葉の数を数える。(葉の数を表す数のリストを返す) そのリストの各値を足す。 (define (count-leaves t) (accumulate + 0 (map (lambda (x) (cond ((null? x) 0) ((not (pair? x)) 1) (else (count-leaves x)…続きを読む
問題2.34 (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) (define (horner-eval x coefficient-sequence) (accumulate (lamb…続きを読む
問題2.33 アキュムレータ手続き (define (accumulate op initial sequence) (if (null? sequence) initial (op (car sequence) (accumulate op initial (cdr sequence))))) map の定義 (define (map p sequence) (accumulate (lambd…続きを読む
問題2.32 subsets が 引数s の全ての部分集合のリストを返すとすると、rest は s の先頭要素を除いた集合の全ての部分集合のリスト。 s の全ての部分集合のリストは、rest と rest の各要素に s の先頭要素を追加したものとの合成となる。 gauche での表示の為に print を使って表示している。 (define (subsets s) (if (null? s) (…続きを読む