Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

29 rader
679 B

  1. (import "cxr.slime")
  2. (define key-not-found-index -1)
  3. (define (make-set :rest vals)
  4. (set-type
  5. (if vals
  6. (list vals)
  7. '(()))
  8. :set))
  9. (define (set-find set val)
  10. (let ((values (car set)))
  11. (define (inner values current-index)
  12. (cond ((null? values) key-not-found-index)
  13. ((= (car values) val) current-index)
  14. (else (inner (cdr values) (+ 1 current-index)))))
  15. (inner values 0)))
  16. (define (set-contains? set val)
  17. (unless (= (set-find set val) key-not-found-index)
  18. t))
  19. (define (set-insert! set value)
  20. (unless (set-contains? set value)
  21. (mutate set (pair (pair value (first set)) ()))
  22. (set-type set :set))
  23. set)