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 smc.vnet.net
  • Subject: [mg22218] Re: How to call by reference for particular argument(s)?
  • From: Tobias Oed <tobias at physics.odu.edu>
  • Date: Fri, 18 Feb 2000 02:34:58 -0500 (EST)
  • Organization: Old Dominion University
  • References: <8889e1$c4r@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

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
extreemly
clumsy too my. Why not skip the whole myPosition thing and use insted

res=Map[First,Position[u1,Apply[Alternatives,u2],1]]

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
I 
think,
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?