If the list L contains only strings, then horizontalJoin acts like the command concatenate.
i1 : L = {"some", "strings", "to", "join"} o1 = {some, strings, to, join} o1 : List |
i2 : horizontalJoin L o2 = somestringstojoin |
i3 : concatenate L o3 = somestringstojoin |
i4 : demark(" ", L) --to insert spaces when concatenating strings o4 = some strings to join |
Unlike concatenate, horizontalJoin can also be used on Nets.
i5 : M = for i from 1 to 10 list if isPrime i then netList{toString i, toString i^2} +-+ +-+ +--+ +--+ o5 = {, |2|, |3|, , |5 |, , |7 |, , , } +-+ +-+ +--+ +--+ |4| |9| |25| |49| +-+ +-+ +--+ +--+ o5 : List |
i6 : horizontalJoin M +-++-++--++--+ o6 = |2||3||5 ||7 | +-++-++--++--+ |4||9||25||49| +-++-++--++--+ |
As the previous example shows, null arguments are allowed and ignored.
Nets and strings can be mixed in the input list. In this case, a string is interpreted as a net of height one, with baseline below the string. The operator Net ^ ZZ can be used to lower or raise the baseline of a string or net.
i7 : R = QQ[x]; |
i8 : N1 = for i from 1 to 5 list if isPrime i then netList{x^i, i*x, i:x, i} else toString i +------+ +---------+ +---------------+ | 2 | | 3 | | 5 | o8 = {1, |x |, |x |, 4, |x |} +------+ +---------+ +---------------+ |2x | |3x | |5x | +------+ +---------+ +---------------+ |(x, x)| |(x, x, x)| |(x, x, x, x, x)| +------+ +---------+ +---------------+ |2 | |3 | |5 | +------+ +---------+ +---------------+ o8 : List |
i9 : horizontalJoin N1 +------++---------+ +---------------+ | 2 || 3 | | 5 | o9 = 1|x ||x |4|x | +------++---------+ +---------------+ |2x ||3x | |5x | +------++---------+ +---------------+ |(x, x)||(x, x, x)| |(x, x, x, x, x)| +------++---------+ +---------------+ |2 ||3 | |5 | +------++---------+ +---------------+ |
i10 : N2 = for i from 1 to 5 list if isPrime i then netList{x^i, i*x, i:x, i} else (toString i)^-6 +------+ +---------+ +---------------+ | 2 | | 3 | | 5 | o10 = { , |x |, |x |, , |x |} +------+ +---------+ +---------------+ |2x | |3x | |5x | +------+ +---------+ +---------------+ |(x, x)| |(x, x, x)| |(x, x, x, x, x)| +------+ +---------+ +---------------+ 1 |2 | |3 | 4 |5 | +------+ +---------+ +---------------+ o10 : List |
i11 : horizontalJoin N2 +------++---------+ +---------------+ | 2 || 3 | | 5 | o11 = |x ||x | |x | +------++---------+ +---------------+ |2x ||3x | |5x | +------++---------+ +---------------+ |(x, x)||(x, x, x)| |(x, x, x, x, x)| +------++---------+ +---------------+ 1|2 ||3 |4|5 | +------++---------+ +---------------+ |
In the next example, we use horizontalJoin to concatenate the display of two random integer matrices. The matrices are converted to nets first with the command net.
i12 : A = net matrix apply(3, i -> apply(3, j -> random(10))) o12 = | 8 1 3 | | 7 8 3 | | 3 7 8 | |
i13 : B = net matrix apply(3, i -> apply(3, j -> random(10))) o13 = | 8 5 7 | | 8 5 2 | | 3 6 3 | |
i14 : horizontalJoin(A,B) o14 = | 8 1 3 || 8 5 7 | | 7 8 3 || 8 5 2 | | 3 7 8 || 3 6 3 | |
Nested sequences in the input are automatically spliced. For instance, in the next example the input is interpreted as \{A, B, A, B, A\}.
i15 : horizontalJoin {(A, B), (A, B, (A))} o15 = | 8 1 3 || 8 5 7 || 8 1 3 || 8 5 7 || 8 1 3 | | 7 8 3 || 8 5 2 || 7 8 3 || 8 5 2 || 7 8 3 | | 3 7 8 || 3 6 3 || 3 7 8 || 3 6 3 || 3 7 8 | |
However, the command horizontalJoin \{\{A, B\}, \{A, B, \{A\}\}\} will throw an error, because nested lists are not automatically flattened.
The object horizontalJoin is a compiled function.