Hello guilers!
ANOUNCEMENT: functional sets and functional set generator aka the set-o-mat library
I have made some fairly good progress into making a set library that takes assoc like objects
like assoc's and vhashes, and ouputs a functional set / setmap / ordered set / ordered setmap
library that includes the complement operator.
You may find it at,
--------------
Complements is based no symbolic algebra and does not require an instantiation of the world
But some operations needs a world to exists. See the documentation in ice-9/set/complement.scm
ice-9/vset.scm contains the functional set operations related to guile's vlist.scm and the assoc structure defined theirin.
ice-9/set/complement.scm contains a small library that does set-operations with complements on lists, you may use those to check out and study the complement operator.
Example
scheme@(guile-user)> (use-modules (ice-9 vset))scheme@(guile-user)> (voset-union 7 (voset-complement (voset-intersection (voset-union 1 2 3) (voset-union 3 1))))
$7 = #<#<set len=1> ⊔ #<set len=2>ᶜ>
scheme@(guile-user)> (vset-union 7 (voset-complement (voset-intersection (voset-union 1 2 3) (voset-union 3 1))))
$8 = #<∅ ⊔ #<set len=2>ᶜ>
scheme@(guile-user)> (vset->list (voset-intersection (voset-union 1 2 3 4 5 6 7) (voset-union 7 (voset-complement (voset-intersection (voset-union 1 2 3) (voset-union 3 1))))))
$11 = (7 2 4 5 6)
scheme@(guile-user)> (vset->list (vset-intersection (vset-union 1 2 3 4 5 6 7) (vset-union 7 (vset-complement (voset-intersection (vset-union 1 2 3) (vset-union 3 1))))))
$12 = (2 4 5 6 7)
scheme@(guile-user)>
Thats' all folks. Happy hacking.