parent
f80085ff0a
commit
83aad018ca
|
@ -138,13 +138,6 @@ HELP: >hashtable
|
|||
{ $values { "assoc" "an assoc" } { "hashtable" "a hashtable" } }
|
||||
{ $description "Constructs a hashtable from any assoc." } ;
|
||||
|
||||
HELP: prune
|
||||
{ $values { "seq" "a sequence" } { "newseq" "a sequence" } }
|
||||
{ $description "Outputs a new sequence with each distinct element of " { $snippet "seq" } " appearing only once. Elements are compared for equality using " { $link = } " and elements are ordered according to their position in " { $snippet "seq" } "." }
|
||||
{ $examples
|
||||
{ $example "USING: hashtables prettyprint ;" "{ 1 1 t 3 t } prune ." "V{ 1 t 3 }" }
|
||||
} ;
|
||||
|
||||
HELP: all-unique?
|
||||
{ $values { "seq" sequence } { "?" "a boolean" } }
|
||||
{ $description "Tests whether a sequence contains any repeated elements." }
|
||||
|
|
|
@ -178,7 +178,7 @@ M: hashtable assoc-like
|
|||
rot 2dup key?
|
||||
[ 3drop ] [ dupd dupd set-at swap push ] if ; inline
|
||||
|
||||
: prune ( seq -- newseq )
|
||||
M: sequence prune ( seq -- newseq )
|
||||
[ length <hashtable> ]
|
||||
[ length <vector> ]
|
||||
[ ] tri
|
||||
|
|
|
@ -660,9 +660,33 @@ HELP: prefix
|
|||
{ $example "USING: prettyprint sequences ;" "{ 1 2 3 } 0 prefix ." "{ 0 1 2 3 }" }
|
||||
} ;
|
||||
|
||||
HELP: prune
|
||||
{ $values { "seq" "a sequence" } { "newseq" "a sequence" } }
|
||||
{ $description "Outputs a new sequence with each distinct element of " { $snippet "seq" } " appearing only once. Elements are compared for equality using " { $link = } " and elements are ordered according to their position in " { $snippet "seq" } "." }
|
||||
{ $examples
|
||||
{ $example "USING: sequences prettyprint ;" "{ 1 1 t 3 t } prune ." "V{ 1 t 3 }" }
|
||||
} ;
|
||||
|
||||
HELP: diff
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "newseq" sequence } }
|
||||
{ $description "Outputs a sequence consisting of elements present in " { $snippet "seq2" } " but not " { $snippet "seq1" } ", comparing elements for equality." } ;
|
||||
{ $description "Outputs a sequence consisting of elements present in " { $snippet "seq2" } " but not " { $snippet "seq1" } ", comparing elements for equality." }
|
||||
{ $examples
|
||||
{ $example "USING: sequences prettyprint ;" "{ 1 2 3 } { 2 3 4 } diff ." "{ 4 }" }
|
||||
} ;
|
||||
|
||||
HELP: intersect
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "newseq" sequence } }
|
||||
{ $description "Outputs a sequence consisting of elements present in both " { $snippet "seq1" } " and " { $snippet "seq2" } "." }
|
||||
{ $examples
|
||||
{ $example "USING: sequences prettyprint ;" "{ 1 2 3 } { 2 3 4 } union ." "{ 1 2 3 4 }" }
|
||||
} ;
|
||||
|
||||
HELP: union
|
||||
{ $values { "seq1" sequence } { "seq2" sequence } { "newseq" sequence } }
|
||||
{ $description "Outputs a sequence consisting of elements present in " { $snippet "seq1" } " and " { $snippet "seq2" } " which does not contain duplicate values." }
|
||||
{ $examples
|
||||
{ $example "USING: sequences prettyprint ;" "{ 1 2 3 } { 2 3 4 } union ." "{ 1 2 3 4 }" }
|
||||
} ;
|
||||
|
||||
HELP: sum-lengths
|
||||
{ $values { "seq" "a sequence of sequences" } { "n" integer } }
|
||||
|
|
|
@ -260,5 +260,9 @@ unit-test
|
|||
[ "asdf " ] [ " asdf " [ CHAR: \s = ] left-trim ] unit-test
|
||||
[ " asdf" ] [ " asdf " [ CHAR: \s = ] right-trim ] unit-test
|
||||
|
||||
[ { 1 2 3 4 } ] [ { 1 2 3 } { 2 3 4 } union ] unit-test
|
||||
[ { 4 } ] [ { 1 2 3 } { 2 3 4 } diff ] unit-test
|
||||
[ { 2 3 } ] [ { 1 2 3 } { 2 3 4 } intersect ] unit-test
|
||||
|
||||
! Hardcore
|
||||
[ ] [ "sequences" reload ] unit-test
|
||||
|
|
|
@ -444,9 +444,17 @@ PRIVATE>
|
|||
: memq? ( obj seq -- ? )
|
||||
[ eq? ] with contains? ;
|
||||
|
||||
: intersect ( seq1 seq2 -- seq1/\seq2 )
|
||||
: diff ( seq1 seq2 -- newseq )
|
||||
swap [ member? not ] curry subset ;
|
||||
|
||||
: intersect ( seq1 seq2 -- newseq )
|
||||
swap [ member? ] curry subset ;
|
||||
|
||||
GENERIC: prune ( obj -- obj' )
|
||||
|
||||
: union ( seq1 seq2 -- newseq )
|
||||
append prune ;
|
||||
|
||||
: remove ( obj seq -- newseq )
|
||||
[ = not ] with subset ;
|
||||
|
||||
|
@ -512,9 +520,6 @@ M: slice equal? over slice? [ sequence= ] [ 2drop f ] if ;
|
|||
[ 0 swap copy ] keep
|
||||
] new-like ;
|
||||
|
||||
: diff ( seq1 seq2 -- newseq )
|
||||
swap [ member? not ] curry subset ;
|
||||
|
||||
: peek ( seq -- elt ) dup length 1- swap nth ;
|
||||
|
||||
: pop* ( seq -- ) dup length 1- swap set-length ;
|
||||
|
|
Loading…
Reference in New Issue