(import "cxr.slime") (define key-not-found-index -1) (define (make-set :rest vals) (set-type (if vals (list vals) '(())) :set)) (define (set-find set val) (let ((values (car set))) (define (inner values current-index) (cond ((null? values) key-not-found-index) ((= (car values) val) current-index) (else (inner (cdr values) (+ 1 current-index))))) (inner values 0))) (define (set-contains? set val) (unless (= (set-find set val) key-not-found-index) t)) (define (set-insert! set value) (unless (set-contains? set value) (mutate set (pair (pair value (first set)) ())) (set-type set :set)) set)