In article <6b3p4h$rqu@smc.vnet.net>, calvitti@glenn.ces.cwru.edu wrote:
> 2) Is there an elegant way for a default (or optional) argument to a
> function to take a value which depends on another argument to the same
> function if it's not explicitly passed? e.g. in "foo" I would like to
> have "a" default to Length[lst].
>
> foo[lst_List, a_Integer : Length[lst_]] := lst[[a]]
>
> but foo[{5,6,7,8}] returns "List", which implies that it's defaulting
> "a" to 0. I've tried definding an optional argument with
>
> Options[foo] = {a -> Length[lst_]}
>
> with no luck....Obviously, I can pass a : Infinity and set it
> appropriately within the functions' body after a quick check, but it
> doesn't seem like an elegant solution.
I was unable to figure out definitively from the doc when the default
value is evaluated, but it appears to be evaluated at the time the
function foo is defined.
I would propose using a pair of functions:
foo[lst_List, a_Integer] := lst[[a]] foo[lst_List] := foo[lst,
Length[lst]]
This strikes me as "elegant".
- Stoney
--
Stonewall Ballard StoneSoft, Inc.
sb.nospam@stonesoft.com http://www.stonesoft.com/ Remove ".nospam"
before replying