Matlab/Scilabの参照渡し

Scilabで、効率の問題で参照渡しをしたいと思って調べてみた。で、Matlabについては
http://www.mit.edu/~pwb/cssm/matlab-faq.txt

Q3.11: Can MATLAB pass by reference?
====================================

This is really two questions in one. One is "Can I modify a
function's input argument?" This would save memory and simplify
programming in some cases. The answer here is "NO". If you modify the
input argument of a function, all you do is modify a copy of the
argument local to the function. The only way to modify variables from
a function is to return the result when finished, as in

bigstruct = addelement(bigstruct, 5);

The other question is: "Pass by value wastes memory and time, since
copies of variables are made. How can I fix this?" Here, the answer
is "Your assumption is flawed, you don't need to." MATLAB uses a
scheme called "copy-on-write" to optimize this sort of thing.
Basically, data is shared between variables whenever possible, and a
true copy is made only when one of the variables is modified. So
although MATLAB's calling convention appears to be pass-by-value, if
you don't modify the input variables, the data is never copied.

要約すると、関数内で引数にされたものを変更可能かと言うことに関してはNoです。返り値を代入してくださいな。
関数呼び出しの際に全部コピーをするんだったら、ちょっと大変じゃね?メモリとかやばくね?という質問に関しては、copy-on-write機構を使ってるから大丈夫だよ、とのこと。
うーん。納得しかねる。でかいオブジェクトを関数内で変更したいということはあるだろうし(実際にある)、その時に毎回コピーを行うというのは非効率。
例えとして、簡単な話で言うなら、

a = list();
for i = 1:n
  a = push(a, i)
end

のように、リストの最後尾に要素を追加するような関数を作ったとしたら、これってO(n^2)じゃないの?
もうちょいなんとかならんのかね?

Scilabについては調べても出てこなかったんだけれど、やっぱり専用の構文は見つからなかった。「関数」として無理ならマクロとして調べてみたほうがいいのかな。
Scilabにおいては関数もmacroらしいという記述を読んだ記憶があるんだけれど、マクロと呼べるほど機能を持ったものがはたして作れるんだろうか。