1 ! Copyright (C) 2013 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel locals sequences sequences.extras sets ;
6 : setwise-xor ( seq1 seq2 -- set )
7 [ append members ] [ intersect ] 2bi diff ;
9 : symmetric-diff ( set1 set2 -- set )
10 [ union ] [ intersect ] 2bi diff ;
12 : proper-subset? ( set1 set2 -- ? )
13 2dup subset? [ swap subset? not ] [ 2drop f ] if ;
15 : superset? ( set1 set2 -- ? )
18 : disjoint? ( set1 set2 -- ? )
21 :: non-repeating ( seq -- seq' )
22 HS{ } clone :> visited
23 0 seq new-resizable :> accum
25 accum over visited ?adjoin
26 [ push ] [ remove-first! drop ] if
27 ] each accum seq like ;