Re: evaluate f[{x,y,z}] when f[x,y,z] defined
- To: mathgroup at smc.vnet.net
- Subject: [mg103400] Re: evaluate f[{x,y,z}] when f[x,y,z] defined
- From: pfalloon <pfalloon at gmail.com>
- Date: Sun, 20 Sep 2009 06:22:05 -0400 (EDT)
- References: <h9283i$lo6$1@smc.vnet.net>
On Sep 19, 7:26 pm, Murray Eisenberg <mur... at math.umass.edu> wrote:
> I ought to know how to do this (simply) but don't, or at least don't
> recall how...
>
> Often I have a function of several variables defined, for example:
>
> f[x_, y_, z_] := Sqrt[x^2 + y^2 + z^2]
>
> And I have some list of numbers, e.g.:
>
> a = {4, 3, 2};
>
> How can I evaluate the following...
>
> f[a]
>
> ... without having to make a separate definition such as
>
> f[{x_, y_, z_}] := f[x, y,z]
>
> ?
>
> --
> Murray Eisenberg mur... at math.umas=
s.edu
> Mathematics & Statistics Dept.
> Lederle Graduate Research Tower phone 413 549-1020 (H)
> University of Massachusetts 413 545-2859 (=
W)
> 710 North Pleasant Street fax 413 545-1801
> Amherst, MA 01003-9305
Hi Murray,
There are probably a few ways to do this. My preference would be just
to Apply the function to the list:
f@@a
If you have a list of such points you could use, e.g.
f@@@{a,b,c}
to get f[a], f[b], f[c] (where each of a,b,c is assumed to be a List).
However, as a general stylistic issue, I think a good rule of thumb is
that if the three arguments (in this case x,y,z) form a vector in some
meaningful sense, then it is best to use a definition which takes the
vector, rather than individual points, as its argument. Thus,
f[vec_List] := ...
or
f[{xi__}] := ...
or
f[{x_,y_,z_}] := ....
etc
I find this extra structure makes code easier to read and errors
harder to make.
Cheers,
Peter.