diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index cc8daba8c0..08831579bb 100644 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -714,6 +714,26 @@ HELP: 3append } } ; +HELP: surround +{ $values { "seq1" sequence } { "seq2" sequence } { "seq3" sequence } { "newseq" sequence } } +{ $description "Outputs a new sequence with " { $snippet "seq1" } " inserted between " { $snippet "seq2" } " and " { $snippet "seq3" } "." } +{ $examples + { $example "USING: sequences prettyprint ;" + "\"sssssh\" \"(\" \")\" surround ." + "\"(sssssh)\"" + } +} ; + +HELP: glue +{ $values { "seq1" sequence } { "seq2" sequence } { "seq3" sequence } { "newseq" sequence } } +{ $description "Outputs a new sequence with " { $snippet "seq3" } " inserted between " { $snippet "seq1" } " and " { $snippet "seq2" } "." } +{ $examples + { $example "USING: sequences prettyprint ;" + "\"a\" \"b\" \",\" glue ." + "\"a,b\"" + } +} ; + HELP: subseq { $values { "from" "a non-negative integer" } { "to" "a non-negative integer" } { "seq" sequence } { "subseq" "a new sequence" } } { $description "Outputs a new sequence consisting of all elements starting from and including " { $snippet "from" } ", and up to but not including " { $snippet "to" } "." } @@ -1348,6 +1368,8 @@ ARTICLE: "sequences-appending" "Appending sequences" { $subsection append } { $subsection prepend } { $subsection 3append } +{ $subsection surround } +{ $subsection glue } { $subsection concat } { $subsection join } "A pair of words useful for aligning strings:" diff --git a/core/sequences/sequences-tests.factor b/core/sequences/sequences-tests.factor index e27f2410b3..0d795d453a 100644 --- a/core/sequences/sequences-tests.factor +++ b/core/sequences/sequences-tests.factor @@ -268,3 +268,6 @@ M: bogus-hashcode hashcode* 2drop 0 >bignum ; [ { 1 3 "X" 5 7 } ] [ "X" 2 { 1 3 5 7 } insert-nth ] unit-test [ V{ 0 2 } ] [ "a" { "a" "b" "a" } indices ] unit-test + +[ "a,b" ] [ "a" "b" "," glue ] unit-test +[ "(abc)" ] [ "abc" "(" ")" surround ] unit-test diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index 118969bd3c..3461266081 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -317,6 +317,10 @@ PRIVATE> : 3append ( seq1 seq2 seq3 -- newseq ) pick 3append-as ; +: surround ( seq1 seq2 seq3 -- newseq ) swapd 3append ; inline + +: glue ( seq1 seq2 seq3 -- newseq ) swap 3append ; inline + : change-nth ( i seq quot -- ) [ [ nth ] dip call ] 3keep drop set-nth ; inline