Skip to content

Instantly share code, notes, and snippets.

@asivitz
Created May 15, 2013 19:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save asivitz/5586655 to your computer and use it in GitHub Desktop.
Save asivitz/5586655 to your computer and use it in GitHub Desktop.
;; OVERLAPPING SETS
;; (overlap-sets '((1 2 3) (4 5 3) (6 7 8 9))) -> ((5 4 1 2 3) (6 7 8 9))
(define (overlap-set-with-sets set sets leftover)
(if (null? sets)
(cons set leftover)
(let ([is (lset-intersection = set (car sets))])
(if (null? is)
(overlap-set-with-sets set (cdr sets) (cons (car sets) leftover))
(overlap-set-with-sets (lset-union = set (car sets)) (cdr sets) leftover)))))
(define (overlap-sets sets)
(if (null? sets)
'()
(let ([res (overlap-set-with-sets (car sets) (cdr sets) '())])
(if (equal? (car res) (car sets)) ; didn't find anything
(cons (car res) (overlap-sets (cdr res)))
(overlap-sets res)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment