Concatenation. Recipients of an assignment. Results of a function
Mh = [m11 m12 m13.. m1N] or [m11, m12, m13,.., m1N] Mv = [m11 ; m21 ; m31..; mN1] M = [m11, m12,...; m21, m22,...;...] [r1, r2,...] = func(...) [r1, r2,.., rN] = (e1, e2, .., eN) [r1, r2,.., rk] = (e1, e2, .., ek,.., eN) [r1, r2,.., rN] = mylist(:) [r1, r2,.., rN] = S.field([i1 i2.. iN])
Set of objects to be concatenated (and merged: the former individual containers are removed). The following subsets of types of objects can be mixed in-between, but are mutually exclusive:
![]() | Encoded integers of different inttypes can't be concatenated together. |
Matrices with the type of all m##
(if they all have the same data type).
cells arrays (if mi
are so).
structures arrays (if mi
are so).
Input objects (literals like -1.23
or "abcd"
, variables, or expressions
like a+%pi
, etc).
a simple list
Array of Structures with a field named field
.
Indices of components selected from S
.
Output variables
[..] bundle their contents of simple and compatible types into a homogeneous vector, matrix or hypermatrix.
![]() | An horizontal or a vertical concatenation is a binary iterated operator.
It is performed step-by-step from left-to-right, and from top-to-bottom.
Thus, [1 3 5 7] is performed as
[[[1 3] 5] 7] . |
Inside brackets,
![]() | Using commas instead of spaces is safer. For instance,
[2 1 +%i] means [2, 1, %i] ,
while [2 1 + %i] means
[2, 1+%i] |
..
In some limits, brackets may be applied on a set of data having different but compatible types. In this case, some data are converted into the dominating type available in the set. The main conversion rules are the following:
![]() | booleans and polynomials are not compatible.
|
Similarly, the result becomes sparse-encoded as soon as a sparse-encoded component is met and processed.
[%z, 1+%s, 1-%i*%s]
// => [z, 1+z, 1-iz]
.[int8(2) uint8(7)]
,
[int8(2) int16(7)]
,
[int8(2) 1.]
will all yield an error.[]
."c"
."f"
."="
assignment
In this case, brackets are no longer concatenators. They are used as left and right delimiters of a series of variables used as recipients.
[a,b]=(%pi,"Hi", %z)
is OK, but %z
is ignored.[a,b,c]=(%pi,"Hi")
yields an error because c
expects some foods.[a,b,a] = (%pi, %z, "Allo")
performs assignments
from left to right, such that finally a = "Allo"
.// Horizontal concatenations a = [ %pi 4 -1 ] b1 = grand(3,4,"uin",0,10) b2 = grand(3,2,"uin",0,10) b = [b1 b2] // they must have the same number of rows // Vertical concatenations a = [-2 ; 10 ; 7] b1 = grand(2,4,"uin",0,10) b2 = grand(3,4,"uin",0,10) b = [b1 ; b2] // they must have the same number of columns // Mixed horizontal and vertical concatenations a = [ 3 7 ; 6, 5 ] b = [ 1:3 ; 7:3:13] c = [ a b ; a b] d = [ 3 5 1 4 ] e = [ d d d d d d ] // Concatenation of various types of data: ['this is' ; 'a column' ; 'of texts'] s = poly(0,'s');[1/s,2/s] [tf2ss(1/s),tf2ss(2/s)] [%t %f %f %T %F] // Heterogeneous concatenations with automatical types conversions [%T int8(-5)] [%T %pi %f 2] [%pi, 2+%i, %F] v = [%pi+0*%i, %F, %z, (1-%z)^2 ]; typeof(v), isreal(v) v = [10 1/%z], typeof(v) // Incompatible heterogeneous concatenations => ERRORS [%F %z] [int8(%pi) uint8(%e)] [int8(%pi) int16(%e)] [int8(%pi) %e] // Concatenation of cells arrays: c1 = {%pi %t}; c2 = {%z "abc"}; c = [[{%i} c1] ; [c2, {1/%z^2}]] // comma mandatory, to not parse c2{1/%z^2} | ![]() | ![]() |
Distributive assignments:
// Output from a function. Most often, output results are serially optional: M = rand(3,3); [u, s] = schur(M) // we expect and use both results u and s u = schur(M) // we expect and store only the first result u // Direct RHS list [a, b, c] = (%pi, %t, "test") [a, b] = (%e, %f, "Hello") [a, b, a] = (%pi, %t, "test"); a // Explicit RHS list L = list(%z, %i, %t, %pi, "Text"); [a, b, c] = L(:) // RHS structure s(2,3).r = %pi; s(2,1).r = %i; s(2,2) = %e; s(2,:).r s.r([2 4 6]) [a, b, c] = s.r([2 4 6]) // Forbidden / Rejected LHS expressions (=> error) [m, n, m+n] = myfun(a,b) // Symbolic expressions like "m+n" are forbidden [p, 4.5, q] = myfun(a,b) // Literal LHS values or expressions like "4.5" are forbidden [r, s+3 ] = myfun(a,b) // Expressions mixing literals and symbols like "s+3" can't be LHS recipients | ![]() | ![]() |
--> [a, b, c] = (%pi, %t, "test") a = 3.1415927 b = T c = test --> [a, b] = (%e, %f, "Hello") a = 2.7182818 b = F --> [a, b, a] = (%pi, %t, "test"); a a = test
Version | Description |
6.0 | Brackets [..] and braces
{..} are no longer equivalent |
6.1 |
|