Re: slot argument weirdness
- To: mathgroup at smc.vnet.net
- Subject: [mg83937] Re: slot argument weirdness
- From: Albert Retey <awnl at arcor.net>
- Date: Wed, 5 Dec 2007 07:06:27 -0500 (EST)
- References: <fj37b2$hok$1@smc.vnet.net>
Jerry wrote:
> I have to produce some bulky matrices which are described by
> two parameters and it seems the easiest way to produce them
> is as follows (I took out all the complexity and just left
> in the slots to illustrate my problem). v is the parameter
> array.
>
> v = {2, 5};
> myMatrix=Apply[{{#1, #2}, {#2, #1}} &, v]
>
> giving {{2, 5}, {5, 2}} and all is well.
>
> But since the actual form in the first argument in Apply is
> really a large messy thing, I thought I'd produce it just
> once in the notebook and represent it with:
>
> m = {{#1, #2}, {#2, #1}};
>
> But geez, this doesn't work at all:
>
> MyMatrix2= Apply[m &, v]
>
> gives {{#1, #2}, {#2, #1}}
>
> I've tried a lot of things to make this work but have failed
> completely. If someone can tell me that there is absolutely
> no representation of the slot configuration that will do
> what I want, then I can quit trying. Or is there? Thanks for
> any info.
The slots don't make much sense without the enclosing function. This
means you should define m with the & to make it a function and then use
it like:
m = {{#1,#2},{#2,#1}}&;
Apply[m,v]
note that the definition of m is just a shortcut for :
m = Function[{{#1,#2},{#2,#1}}]
which can be elaborated even more to:
m = Function[{x,y},{{x,y},{y,x}}]
I find it often much more readable to work with named arguments for
functions than just the slots, but that depends on the use case and is a
matter of taste.
hth,
albert