1 ! Copyright (C) 2013 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: assocs hash-sets kernel sequences sequences.extras
7 : setwise-xor ( seq1 seq2 -- set )
8 [ append members ] [ intersect ] 2bi diff ;
10 : symmetric-diff ( set1 set2 -- set )
11 [ union ] [ intersect ] 2bi diff ;
13 : proper-subset? ( set1 set2 -- ? )
14 2dup subset? [ swap subset? not ] [ 2drop f ] if ;
16 : superset? ( set1 set2 -- ? )
19 : disjoint? ( set1 set2 -- ? )
22 :: non-repeating ( seq -- seq' )
23 HS{ } clone :> visited
24 0 seq new-resizable :> accum
26 accum over visited ?adjoin
27 [ push ] [ remove-first! drop ] if
28 ] each accum seq like ;
30 : adjoin-at* ( value key assoc -- set )
31 [ [ HS{ } clone ] unless* [ adjoin ] keep dup ] change-at ;
33 : mapped-set ( ... seq quot: ( ... elt -- ... newelt ) -- ... set )
34 over length <hash-set> [
38 : unique-by ( seq quot: ( elt -- key ) -- seq' )
39 over length <hash-set> '[ @ _ ?adjoin ] filter ; inline