Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 
 
 

32 lignes
792 B

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