; 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)