}
} ;
+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" } "." }
{ $subsection append }
{ $subsection prepend }
{ $subsection 3append }
+{ $subsection surround }
+{ $subsection glue }
{ $subsection concat }
{ $subsection join }
"A pair of words useful for aligning strings:"
[ { 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
: 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