問題3.18 – SICP(計算機プログラムの構造と解釈)その118

問題3.18

1度たどった対を再度たどった場合に循環しているといえる。
1度たどった対をリスト walks に追加していって保持し、次にたどる対が walks に含まれているかどうかをチェックする。

(define (circulate? items)
  (define walks '())
  (define (has-circulate? x)
    (if (memq x walks)
        #t
        (begin (set! walks (cons x walks)) #f)))
  (define (circulate?-iter i)
    (if (not (pair? i))
        #f
        (if (has-circulate? (car i))
            #t
            (circulate?-iter (cdr i)))))
  (circulate?-iter items))

(define z (make-cycle (list 'a 'b 'c)))
(circulate? (list 'a 'b 'c))
gosh> #f
(circulate? z)
gosh> #t

問題3.19

パス

問題3.20

パス

計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»