問題3.25 – SICP(計算機プログラムの構造と解釈)その123
問題3.25 多次元の表を表現する。 (define (make-table) (let ((local-table (list ‘*table*))) (define (lookup key-list) (lookup-iter key-list local-table)) (define (lookup-iter key-list local-table) (if (null? key-lis…続きを読む
問題3.25 多次元の表を表現する。 (define (make-table) (let ((local-table (list ‘*table*))) (define (lookup key-list) (lookup-iter key-list local-table)) (define (lookup-iter key-list local-table) (if (null? key-lis…続きを読む
問題3.24 (define (make-table same-key?) (let ((local-table (list ‘*table*))) (define (lookup key-1 key-2) (let ((subtable (same-key? key-1 (cdr local-table)))) (if subtable (let ((record (same-key? key-…続きを読む
問題3.23 (define (front-ptr queue) (car queue)) (define (rear-ptr queue) (cdr queue)) (define (set-front-ptr! queue item) (set-car! queue item)) (define (set-rear-ptr! queue item) (set-cdr! queue item))…続きを読む
問題3.22 (define (make-queue) (let ((front-ptr ‘()) (rear-ptr ‘())) (define (set-front-ptr! item) (set! front-ptr item)) (define (set-rear-ptr! item) (set! rear-ptr item)) (define (empty-queue?) (null? …続きを読む
問題3.21 (define q1 (make-queue)) (insert-queue! q1 ‘a) (display q1) gosh> ((a) a)#<undef> (insert-queue! q1 ‘b) (display q1) gosh> ((a b) b)#<undef> (delete-queue! q1) (display q1) go…続きを読む
問題3.18 1度たどった対を再度たどった場合に循環しているといえる。 1度たどった対をリスト walks に追加していって保持し、次にたどる対が walks に含まれているかどうかをチェックする。 (define (circulate? items) (define walks ‘()) (define (has-circulate? x) (if (memq x walks) #t (begi…続きを読む
問題3.17 一度数えた対を記録して保持し、カウント直前にチェックを行う。 (define (make-count-pairs walks) (define (count-pairs x) (cond ((not (pair? x)) 0) ((memq x walks) 0) (else (set! walks (cons x walks)) (+ (count-pairs (car x)) (…続きを読む
問題3.16 最初の count-pairs を実行する際に、カウント1。 (car x) と (cdr x) のそれぞれのポインタが指し示す先が対(pair)である場合に、カウント1。 ポインタの指し示す先が同じ場合に count-pairs が重複して実行される。 (define (count-pairs x) (if (not (pair? x)) 0 (+ (count-pairs (ca…続きを読む
問題3.15 set-to-wow! を実行前と実行後の箱とポインタ図。 (define x (list ‘a ‘b)) (define z1 (cons x x)) (define z2 (cons (list ‘a ‘b) (list ‘a ‘b))) (define (set-to-wow! x) (set-car! (car x) ‘wow) x) (display z1) gosh>…続きを読む
問題3.14 最初の v の箱とポインタ図。 loop を実行していく時の箱とポインタ図の変化。 mystery 実行後の v と w の箱とポインタ図。 (define (mystery x) (define (loop x y) (if (null? x) y (let ((temp (cdr x))) (set-cdr! x y) (loop temp x)))) (loop x ‘()))…続きを読む