SICPを読む(106) 3.3.3 - assoc
あぁ、assocして、set-cdr!すれば、alistが更新できるのか。
すると、リストの中のシンボルの数を数えたくなったら、こう書ける。
(define (collect l) (let ((collects '())) (for-each (lambda (key) (let ((record (assoc key collects))) (if record (set-cdr! record (+ 1 (cdr record))) (set! collects (cons (cons key 1) collects))))) l) collects)) (collect '(a a a b b c c a)) ; ((c . 2) (b . 2) (a . 4))
for-eachって気持ち悪いな。