問題3.16 – SICP(計算機プログラムの構造と解釈)その116
2009年03月02日
問題3.16
最初の count-pairs
を実行する際に、カウント1。
(car x)
と (cdr x)
のそれぞれのポインタが指し示す先が対(pair
)である場合に、カウント1。
ポインタの指し示す先が同じ場合に count-pairs
が重複して実行される。
(define (count-pairs x) (if (not (pair? x)) 0 (+ (count-pairs (car x)) (count-pairs (cdr x)) 1))) (define x (cons 'a (cons 'b (cons 'c '())))) (count-pairs x) gosh> 3 (display x) gosh> (a b c)#<undef> (define x (cons 'd (cons 'a '()))) (set-car! x (cons 'b (cdr x))) (count-pairs x) gosh> 4 (display x) gosh> ((b a) a)#<undef> (define x (cons 'a (cons 'b (cons 'c '())))) (set-car! (cdr x) (cdr (cdr x))) (set-car! x (cdr x)) (count-pairs x) gosh> 7 (display x) gosh> (((c) c) (c) c)#<undef> (define (make-cycle x) (set-cdr! (last-pair x) x) x) (define x (cons 'a (cons 'b (cons 'c '())))) (make-cycle x) gosh> #0=(a b c . #0#) (count-pairs x) ;無限ループに入る
計算機プログラムの構造と解釈
posted with amazlet at 08.11.07
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
ピアソンエデュケーション
売り上げランキング: 6542