| Ruud H.G. van Tol on Tue, 11 Mar 2025 15:27:36 +0100 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| calling by reference |
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