You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
- (define-module set
- :imports ("cxr.slime")
- :exports (make find contains? insert!)
-
- (define key-not-found-index -1)
-
- (define (make . vals)
- (set-type!
- (if vals
- (list vals)
- '(()))
- :set))
-
- (define (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 (contains? set val)
- (unless (= (find set val) key-not-found-index)
- t))
-
- (define (insert! set value)
- (unless (contains? set value)
- (set! set (cons (cons value (car set)) ()))
- (set-type! set :set))
- set)
- )
|