Add duplicates word: finds elements which appear more than once
parent
e6f03f9a4e
commit
b887849eb9
|
@ -8,6 +8,7 @@ $nl
|
|||
{ $subsection prune }
|
||||
"Test for duplicates:"
|
||||
{ $subsection all-unique? }
|
||||
{ $subsection duplicates }
|
||||
"Set operations on sequences:"
|
||||
{ $subsection diff }
|
||||
{ $subsection intersect }
|
||||
|
@ -64,6 +65,13 @@ HELP: prune
|
|||
{ $example "USING: sets prettyprint ;" "{ 1 1 t 3 t } prune ." "V{ 1 t 3 }" }
|
||||
} ;
|
||||
|
||||
HELP: duplicates
|
||||
{ $values { "seq" "a sequence" } { "newseq" "a sequence" } }
|
||||
{ $description "Outputs a new sequence consisting of elements which occur more than once in " { $snippet "seq" } "." }
|
||||
{ $examples
|
||||
{ $example "USING: sets prettyprint ;" "{ 1 2 3 1 2 1 } duplicates ." "{ 1 2 1 }" }
|
||||
} ;
|
||||
|
||||
HELP: all-unique?
|
||||
{ $values { "seq" sequence } { "?" "a boolean" } }
|
||||
{ $description "Tests whether a sequence contains any repeated elements." }
|
||||
|
|
|
@ -16,6 +16,9 @@ IN: sets
|
|||
[ ] [ length <hashtable> ] [ length <vector> ] tri
|
||||
[ [ (prune) ] 2curry each ] keep ;
|
||||
|
||||
: duplicates ( seq -- newseq )
|
||||
H{ } clone [ [ key? ] [ conjoin ] 2bi ] curry filter ;
|
||||
|
||||
: gather ( seq quot -- newseq )
|
||||
map concat prune ; inline
|
||||
|
||||
|
|
Loading…
Reference in New Issue