Subject: [mg22093] How to call by reference for particular argument(s)?

From: d8442803 at student.nsysu.edu.tw (Wen-Feng Hsiao)

Date: Mon, 14 Feb 2000 02:03:46 -0500 (EST)

Organization: NSYSU

Sender: owner-wri-mathgroup at wolfram.com

Dear all,
I cannot figure out how to call by reference for particular arguments.
Say, I want to design a function, which will return the position list
where the second list locates in the first list. For example,
If one inputs the following code:
In[1]:=
res={};
myPosition[{a, b, c, d, e}, {b, d}, res];
res
It outputs {2, 4}. Since the b and d in the second list are in the
positions 2 and 4 of first list. My code is listed below.
SetAttributes[myPosition, HoldAll];
myPosition[v1_, {e1_, e2___}, res_Symbol] := Module[{tmp},
tmp = Flatten[Position[v1, e1]];
If[Length[tmp] != 0,
AppendTo[res, tmp[[1]]]];
If[nil[{e2}] =!= nothing, (* if e2 not null *)
myPosition[v1, {e2}, res]]];
The difficulties are when I change it to the followings, it cannot work:
In[10]:=
res={};
u1={a, b, c, d, e}; u2={b, d};
myPosition[u1, u2, res];
res
the myPosition[u1, u2, res] cannot be resolved. How can I do? Change the
signature to myPosition[v1_Symbol, {e1_Symbol, e2___Symbol}, res_Symbol]
does not work either. It's obvious that the intended call by reference is
only for the third argument "ref", so please show me the rope, thanks!
Furthermore, is there any function exists for the same purpose as
myPosition?
Wen-Feng