calling by reference

"Ruud H.G. van Tol" <[email protected]>
Newsgroups gmane.comp.mathematics.pari.user
Message-ID <[email protected]>
The user manual states:

2.7.2 [...] If an argument is prefixed by a tilde ~ in the function 
declaration and the call, it is passed by reference. (If either the 
declaration or the call is missing a tilde, we revert to a call by value.)


But:

? vecadd(~v,x)= for(i=1,#v,v[i]+=x);

? {
   my(v=[1..6]); print(v);
   vecadd(v,3); print(v);
   vecadd(~v,5); print(v);
}
[1, 2, 3, 4, 5, 6]
[4, 5, 6, 7, 8, 9]
[9, 10, 11, 12, 13, 14]

So the "function signature" seems to be enough.
(but see below)


See also the documentation of for example listput and listinsert, which 
mentions using ~L.

I have never noticed a difference, when either using the tilde or not.


But then this is unexpected:

? F(~v) = v[1]++;

? my(v=vector(3)); F(v); print(v)
[1, 0, 0]

? v=vector(3); F(v); print(v)
[0, 0, 0]

-- Ruud
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.