There's no inbuild function yet, you have to implement it yourself:
>> join: function [series delimiter][length: either char? delimiter [1][length? delimiter] out: collect/into [foreach value series [keep rejoin [value delimiter]]] copy {} remove/part skip tail out negate length length out] == func [series delimiter /local length out value][length: either char? delimiter [1] [length? delimiter] out: collect/into [foreach value series [keep rejoin [value delimiter]]] copy "" remove/part skip tail out negate length length out] >> join [1 2 3] #"," == "1,2,3" >> join [1 2 3] {, } == "1, 2, 3"
per request, here is the function split into more lines:
join: function [ series delimiter ][ length: either char? delimiter [1][length? delimiter] out: collect/into [ foreach value series [keep rejoin [value delimiter]] ] copy {} remove/part skip tail out negate length length out ]
spaced: specialize 'delimit [delimiter: space]andunspaced: specialize 'delimit [delimiter: blank]. To make them more useful, the delimiting omits voids and blanks ("unset!" and "none!" in R3-Alpha and Red), then is smart about coalescing delimiters...so delimit ["a" if false ["b"] if false ["c"] "d"] {, } would be "a, d".