Mata's documentation (in "[M-2] op_increment -- Increment and decrement
operators") says that increment and decrement operators are performed in
relation to the "entire expression." I don't understand why the first and
second elements of -myrowvector = (i, i, ++i, i, i++, i)- don't come out the
same as the first element of -myrowvector = (i, ++i, i, i++, i)-.
Joseph Coveney
P.S. The op_increment documentation does admonish, "and many programmers
feel that i++ or ++i should never be coded in a line that has a second
reference to i, before or after." There's undoubtedly a painful story or
two behind that. And I appreciate that Mata variables aren't Stata macros.
The examples are not intended to be realistic; they're just for exploration
of the operators' behavior in various contexts.
--------------
clear
set more off
local i = 1
display in smcl as result "`i'"
display in smcl as result "`++i'"
display in smcl as result "`i'"
display in smcl as result "`i++'"
display in smcl as result "`i'"
local i = 1
display in smcl as result "`i', `++i', `i', `i++', `i'"
local i = 1
matrix A = (`i', `++i', `i', `i++', `i')
matrix list A
mata
mata clear // -discard-
mata set matastrict on
real rowvector function incrementi(real scalar i)
{
return(i, ++i, i, i++, i)
}
real rowvector function incrementj(real scalar j)
{
return(j, j, ++j, j, j++, j)
}
real rowvector function incrementk(real scalar k)
{
return( (k, ++k, k, k++, k) )
}
real rowvector function incrementl(real scalar l)
{
return( (l, l, ++l, l, l++, l) )
}
real rowvector function incrementm(real scalar m)
{
real rowvector temp; temp = J(1, 5, 0) // Sorry--old habits & all
temp = (m, ++m, m, m++, m)
return(temp)
}
real rowvector function incrementn(real scalar n)
{
real rowvector temp; temp = J(1, 1, 0)
temp = (n, n, ++n, n, n++, n)
return(temp)
}
real rowvector function incremento(real scalar o)
{
real rowvector temp; temp = J(1, 6, .z)
temp[1] = o
temp[2] = ++o
temp[3] = o
temp[4] = o++
temp[5] = o
return(temp)
}
incrementi(1)
incrementj(1)
incrementk(1)
incrementl(1)
incrementm(1)
incrementn(1)
incremento(1)
end
exit
------------
*
* For searches and help try:
* http://www.stata.com/support/faqs/res/findit.html
* http://www.stata.com/support/statalist/faq
* http://www.ats.ucla.edu/stat/stata/