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) なオブジェクトは別なモノになる、という理解で良いのかな。
こんな初歩的な情報をメモらなければならないあたり、微妙スギ。