Re: How can I parse arguments of an expression unevaluated?
- To: mathgroup at smc.vnet.net
- Subject: [mg100970] Re: How can I parse arguments of an expression unevaluated?
- From: Albert Retey <awnl at gmx-topmail.de>
- Date: Thu, 18 Jun 2009 20:49:23 -0400 (EDT)
- References: <h1cv17$j6v$1@smc.vnet.net>
Erich Neuwirth wrote:
> What I would like to have is the following:
> I want to give the expression
> MyFunArgs[1, 2, a = 3, b = 4]
> and I would like to get 3 lists,
> the first list has all the arguments which are
> not written as an assignment, {1,2}
> The second list should be a list of strings
> with the names of the variables to be assignes
> {"a","b"}
> and the third list should be the values to be assigned:
> {3,4}
>
> so
> MyFunArgs[1, 2, a = 3, b = 4]
> should produce
> {{1,2},{"a","b"},{3,4}}
>
> How can I accomplish this?
SetAttributes[MyFunArgs, HoldAll]
MyFunArgs[args___] := Join[
{List @@ DeleteCases[Hold[args], _Set]},
Transpose[
Cases[Hold /@ Hold[args],
Hold[Set[a_, b_]] :> {ToString[Unevaluated[a]], b}]]
]
hth,
albert