問題2.60 – SICP(計算機プログラムの構造と解釈)その72
問題2.60 重複の許されるリストで集合を表す。 element-of-set?、intersection-set はそのままでよい。 重複を許すと結果のリストが大きくなり、要素の検索等の効率が悪くなる。 (define (adjoin-set x set) (cons x set)) (adjoin-set ‘1 ‘(1 2 3 4 5)) gosh> (1 1 2 3 4 5) (def…続きを読む
問題2.60 重複の許されるリストで集合を表す。 element-of-set?、intersection-set はそのままでよい。 重複を許すと結果のリストが大きくなり、要素の検索等の効率が悪くなる。 (define (adjoin-set x set) (cons x set)) (adjoin-set ‘1 ‘(1 2 3 4 5)) gosh> (1 1 2 3 4 5) (def…続きを読む
2.3.3 例:集合の表現 – 順序づけられないリストとしての集合 intersection-set 手続き set1、set2 のいずれかが空集合ならば ‘() を返す。 set1 の最初の要素が set2 に含まれていれば、"set1 の最初の要素" と "set1 の残りの要素と set2 との積集合" とから成るリストを返す。 それ以外の…続きを読む
問題2.58 a. 式は完全に括弧に囲まれている場合 (define (make-sum a1 a2) (list a1 ‘+ a2)) (define (make-product m1 m2) (list m1 ‘* m2)) (define (sum? x) (and (pair? x) (eq? (cadr x) ‘+))) (define (addend s) (car s)) (defi…続きを読む
問題2.57 和の表現の改良 ; 元の被加数 (define (augend s) (caddr s)) ; 任意個の項の和を扱えるようにした被加数 (define (augend s) (if (null? (cdddr s)) (caddr s) (cons ‘+ (cddr s)))) 積の表現の改良 ; 元の被乗数 (define (multiplicand p) (caddr p)) ;…続きを読む
問題2.56 べき乗(冪乗 – Wikipedia): base ^ exponent (baseexponent) べき乗は最初の要素が ** のリスト。 (define (exponentiation? x) (and (pair? x) (eq? (car x) ‘**))) 底(基数)はべき乗のリストの第2項。 (define (base s) (cadr s)) 指数はべき乗…続きを読む
問題2.53 (list ‘a ‘b ‘c) gosh> (a b c) (list (list ‘george)) gosh> ((george)) (cdr ‘((x1 x2) (y1 y2))) gosh> ((y1 y2)) (cadr ‘((x1 x2) (y1 y2))) gosh> (y1 y2) (pair? (car ‘(a short list))) g…続きを読む
問題2.52 a. wave に笑っているような線分を加える (define wave (segments->painter (list (make-segment (make-vect 0.35 0.85) (make-vect 0.40 1.00)) (make-segment (make-vect 0.65 0.85) (make-vect 0.60 1.00)) (make-segm…続きを読む
問題2.51 手続き below は、2つのペインタを引数にとり、第1のペインタをフレームの下半分に、第2のペインタをフレームの上半分に表示する transform-painter を使った場合 (define (below painter1 painter2) (let ((split-point (make-vect 0.0 0.5))) (let ((paint-bottom (transf…続きを読む
問題2.50 ペインタを水平に逆転する変換 flip-horiz (define (flip-horiz painter) (transform-painter painter (make-vect 1.0 0.0) (make-vect 0.0 0.0) (make-vect 1.0 1.0))) ((flip-horiz wave) canvas-frame) gosh> 260.0,3…続きを読む
問題2.49 a. 指定されたフレームの外形を描くペインタ (define draw-frame-outline (let ((v0 (make-vect 0.0 0.0)) (v1 (make-vect 1.0 0.0)) (v2 (make-vect 1.0 1.0)) (v3 (make-vect 0.0 1.0))) (segments->painter (list (make-se…続きを読む