; three homework problems (define (adjoin-set x xs) (let loop ((xs xs) (zs (list))) (cond ((null? xs) (reverse (cons x zs))) ((= x (car xs)) (append (reverse zs) xs)) ((< x (car xs)) (append (reverse (cons x zs)) xs)) (else (loop (cdr xs) (cons (car xs) zs)))))) (define s (list)) (set! s (adjoin-set 1 s)) (set! s (adjoin-set 2 s)) (set! s (adjoin-set 3 s)) (set! s (adjoin-set 4 s)) (set! s (adjoin-set 5 s)) (set! s (adjoin-set 3 s)) (display s) (newline) (define (list-index x xs) (let loop ((xs xs) (idx 0)) (if (null? xs) -1 (if (= (car xs) x) idx (loop (cdr xs) (+ idx 1)))))) (display (list-index 3 '(0 1 2 3 4))) (newline) (display (list-index 7 '(0 1 2 3 4))) (newline) (define (update-count k kc-pairs) (let loop ((kc-pairs kc-pairs) (zs (list))) (cond ((null? kc-pairs) (cons (cons k 1) zs)) ((equal? (caar kc-pairs) k) (cons (cons (caar kc-pairs) (+ (cdar kc-pairs) 1)) (append (cdr kc-pairs) zs))) (else (loop (cdr kc-pairs) (cons (car kc-pairs) zs)))))) (define kc-pairs (list)) (set! kc-pairs (update-count 3 kc-pairs)) (set! kc-pairs (update-count 1 kc-pairs)) (set! kc-pairs (update-count 3 kc-pairs)) (set! kc-pairs (update-count 3 kc-pairs)) (set! kc-pairs (update-count 2 kc-pairs)) (display kc-pairs) (newline)