SICP 読み (264) 5.2 レジスタ計算機での計算

週末に勉強をサボッたのは久々です。
てーか、他の勉強イベントに久々に参加した、とゆーのもあったんですが ...

うーん

備忘録までメモを。当たり前の事と言えばそうなんですが ...
つい最近のテンパッた時にナニですが、

     (define (set-list-of-inst l)
       (let ((elem (assoc (car l) list-of-inst)))
         (if elem
             (let ((tmp (cdr elem)))
               (set! tmp (cons (cadr l) tmp)))
             (set! list-of-inst (cons l list-of-inst))))
       'done)

だと動作せず

    (define (set-list-of-inst l)
      (let ((elem (assoc (car l) list-of-inst)))
        (if elem
            (if (not (dup-element? (cadr l) (cdr elem)))
                (set-cdr! elem (cons (cadr l) (cdr elem))))
            (set! list-of-inst (cons l list-of-inst))
            ))
      'done)

だと動作した件。ちなみに dup-element? 云々はスルーで。差分は以下でまず動作しない方が

             (let ((tmp (cdr elem)))
               (set! tmp (cons (cadr l) tmp)))

で動作するのが

                (set-cdr! elem (cons (cadr l) (cdr elem))))

と。上側のナニは tmp が参照しているオブジェクトと (cdr elem) なオブジェクトは別なモノになる、という理解で良いのかな。
こんな初歩的な情報をメモらなければならないあたり、微妙スギ。