(define (count-change-iter coins amount)
(define (count-change-iter-inner coins amount changes)
(if (= (length coins) 0)
(vector-ref changes amount)
(let ((coin (car coins)))
(do ((i coin (+ i 1)))
((> i amount) (count-change-iter-inner (cdr coins) amount changes))
(vector-set! changes i (+ (vector-ref changes i) (vector-ref changes (- i coin))))))))
(define changes (make-vector (+ amount 1) 0))
(vector-set! changes 0 1)
(count-change-iter-inner coins amount changes))
(display (count-change-iter '(1 5 10 15 25 50) 100))
KGRlZmluZSAoY291bnQtY2hhbmdlLWl0ZXIgY29pbnMgYW1vdW50KQoJKGRlZmluZSAoY291bnQtY2hhbmdlLWl0ZXItaW5uZXIgY29pbnMgYW1vdW50IGNoYW5nZXMpCgkJKGlmICg9IChsZW5ndGggY29pbnMpIDApCgkJCSh2ZWN0b3ItcmVmIGNoYW5nZXMgYW1vdW50KQoJCQkobGV0ICgoY29pbiAoY2FyIGNvaW5zKSkpCgkJCQkoZG8gKChpIGNvaW4gKCsgaSAxKSkpCgkJCQkJICgoPiBpIGFtb3VudCkgKGNvdW50LWNoYW5nZS1pdGVyLWlubmVyIChjZHIgY29pbnMpIGFtb3VudCBjaGFuZ2VzKSkKCQkJCQkgKHZlY3Rvci1zZXQhIGNoYW5nZXMgaSAoKyAodmVjdG9yLXJlZiBjaGFuZ2VzIGkpICh2ZWN0b3ItcmVmIGNoYW5nZXMgKC0gaSBjb2luKSkpKSkpKSkKCShkZWZpbmUgY2hhbmdlcyAobWFrZS12ZWN0b3IgKCsgYW1vdW50IDEpIDApKQoJKHZlY3Rvci1zZXQhIGNoYW5nZXMgMCAxKQoJKGNvdW50LWNoYW5nZS1pdGVyLWlubmVyIGNvaW5zIGFtb3VudCBjaGFuZ2VzKSkKCihkaXNwbGF5IChjb3VudC1jaGFuZ2UtaXRlciAnKDEgNSAxMCAxNSAyNSA1MCkgMTAwKSk=