list-sets.scm 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. (define (set-remove-element set element)
  2. (if (null? set)
  3. set
  4. (if (equal? (car set) element)
  5. (set-remove-element (cdr set) element)
  6. (cons (car set) (set-remove-element (cdr set) element)))))
  7. (define (set-remove set list)
  8. (if (null? list)
  9. set
  10. (set-remove (set-remove-element set (car list)) (cdr list))))
  11. (define (set-intersect set-1 set-2)
  12. (if (null? set-1)
  13. set-1
  14. (if (member (car set-1) set-2)
  15. (cons (car set-1) (set-intersect (cdr set-1) set-2))
  16. (set-intersect (cdr set-1) set-2))))
  17. (define (set-difference set-1 set-2)
  18. (if (null? set-1)
  19. set-1
  20. (if (member (car set-1) set-2)
  21. (set-difference (cdr set-1) set-2)
  22. (cons (car set-1) (set-difference (cdr set-1) set-2)))))
  23. (define (set-union:filter set-1 set-2)
  24. (if (null? set-2)
  25. set-2
  26. (if (member (car set-2) set-1)
  27. (set-union:filter set-1 (cdr set-2))
  28. (cons (car set-2) (set-union:filter set-1 (cdr set-2))))))
  29. (define (set-union set-1 set-2)
  30. (append set-1 (set-union:filter set-1 set-2)))
  31. (define (set-union* sets)
  32. (if (null? sets)
  33. sets
  34. (set-union (car sets) (set-union* (cdr sets)))))