Services & Resources / Wolfram Forums
MathGroup Archive
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: How to call by reference for particular argument(s)?

  • To: mathgroup at
  • Subject: [mg22218] Re: How to call by reference for particular argument(s)?
  • From: Tobias Oed <tobias at>
  • Date: Fri, 18 Feb 2000 02:34:58 -0500 (EST)
  • Organization: Old Dominion University
  • References: <8889e1$>
  • Sender: owner-wri-mathgroup at

Wen-Feng Hsiao wrote:
> 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?

I am not sure about what exactly you are trying to do but it seems
clumsy too my. Why not skip the whole myPosition thing and use insted


which you can write using prefix notation as

res=First /@ Position[u1,Alternatives @@ u2,1]

which is shorter by 6 chars but certainly less readable. Or at least so
cheers Tobias

  • Prev by Date: Dead Thread, some clarification...
  • Next by Date: Re: computational geometry
  • Previous by thread: Re: How to call by reference for particular argument(s)?
  • Next by thread: What is happening here?