Re: on passing arguments to a function, how to break a
- To: mathgroup at smc.vnet.net
- Subject: [mg103725] Re: [mg103701] on passing arguments to a function, how to break a
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Sun, 4 Oct 2009 05:34:19 -0400 (EDT)
- Reply-to: hanlonr at cox.net
use Apply
foo[] := Module[{i, j}, i = 3;
j = 7;
{i, j}]
expr = foo[]
{3,7}
Apply[goo, expr]
goo[3, 7]
or in short form
goo @@ expr
goo[3, 7]
or convert the list to a sequence
goo[Sequence @@ expr]
goo(3,7)
Bob Hanlon
---- Nasser Abbasi <nma at 12000.org> wrote:
=============
Suppose there is a function foo[] which returns back 2 items, say 'i' and
'j'. They must be returned as a list ofcourse, so we have this
foo[] := Module[{i, j},
i = 3;
j = 7;
{i, j}
]
Now I have another function goo[] which accepts 2 items as input, and does
something with them, as in
goo[i_, j_] := Module[{},
i + j
]
Now I'd like to call foo[], and take its output, and pass it to directly to
goo[], but I can NOT do the following:
goo[foo[]]
because there is no function goo[] which accept a list defined. I could
solve this easily by making an intermediate step
{i, j} = foo[]; (*first read into local variables*)
goo[i, j] (* then call goo[] *)
I tried to see if it is possible to eliminate this intermediate step, as it
could be unnecessary, and see if there is a function or a trick in
Mathematica which takes a list and 'unwrap' it for the purpose of making
function calls.
Assuming such a function or method, lets call it 'W' for now, then I would
just type
goo[ W[foo[]] ]
Where W[] would take output from a function, and if it is a list, would
break it down to its sublists, so that goo[ W[foo[]] ] would be converted
to goo[ i,j ]. This W[] function would only ofcourse work in the context
of function calls, as it does not make sense to write
W[{1,2}] and expect to get just "1,2" like this, without these being
grouped in a List[]. So this function W is means only to work in argument
passing.
I can also solve this easily by making goo[] accepts a list, but I wanted to
avoid having to type this:
goo[arg_List] := Module[{},
arg[[1]] + arg[[2]]
]
I think writing "i+j" is more clear than writing " arg[[1]] + arg[[2]]",
that is why I am asking this question.
I wish Mathematica has named arguments? or structs, so I could write
goo[arg_Struct] := Module[{},
arg.i + arg.j
]
Any ideas?
Thank you,
--Nasser
__________ Information from ESET NOD32 Antivirus, version of virus signature database 4476 (20091002) __________
The message was checked by ESET NOD32 Antivirus.
http://www.eset.com