Wolfram Mathematica 函数使用的变量列表
A list of variables used by Wolfram Mathematica function
有没有办法获取函数使用的变量列表?
例如:
一=1;
b=2;
f[x_]:= 2a*x+b;
需要:
一些函数[f]
输出:
{{x},{a,b}}
函数的参数 ({x}) 并不是必须的。
谢谢。
要获取所有符号(不一定是变量),您可以从以下内容开始:
DownValues[f]
产生:
{HoldPattern[f[x_]] :> 2 a x + b}
然后问题是以您不让 Mathematica 进行替换的方式处理它。这是通过 Hold
:
完成的
held=(Hold //@ DownValues[f][[1]])[[1, 2]]
产生:
Hold[Hold[Hold[2] Hold[a] Hold[x]] + Hold[b]]
您可以提取所有看起来像符号的东西:
Cases[held, Hold[_Symbol], Infinity]
你得到:
{Hold[a], Hold[x], Hold[b]}
为了让它更漂亮一点:
Union[Flatten[Hold @@ Cases[held, Hold[_Symbol], Infinity]]]
这给你:
Hold[a, b, x]
您仍然需要 Hold
,因为一旦您丢失它 Mathematica 就会计算 a
和 b
,您将将它们作为符号丢失。
如果您注意到,它会将 x
视为一个符号,您可能不需要它,因为它是一个参数。您可以从 DownValues[f][[1]]
RuleDelayed
(:>
) 表达式的左侧梳理参数,并提取它们,但我会把这个细节留给您。
有没有办法获取函数使用的变量列表? 例如: 一=1; b=2; f[x_]:= 2a*x+b;
需要: 一些函数[f]
输出: {{x},{a,b}}
函数的参数 ({x}) 并不是必须的。
谢谢。
要获取所有符号(不一定是变量),您可以从以下内容开始:
DownValues[f]
产生:
{HoldPattern[f[x_]] :> 2 a x + b}
然后问题是以您不让 Mathematica 进行替换的方式处理它。这是通过 Hold
:
held=(Hold //@ DownValues[f][[1]])[[1, 2]]
产生:
Hold[Hold[Hold[2] Hold[a] Hold[x]] + Hold[b]]
您可以提取所有看起来像符号的东西:
Cases[held, Hold[_Symbol], Infinity]
你得到:
{Hold[a], Hold[x], Hold[b]}
为了让它更漂亮一点:
Union[Flatten[Hold @@ Cases[held, Hold[_Symbol], Infinity]]]
这给你:
Hold[a, b, x]
您仍然需要 Hold
,因为一旦您丢失它 Mathematica 就会计算 a
和 b
,您将将它们作为符号丢失。
如果您注意到,它会将 x
视为一个符号,您可能不需要它,因为它是一个参数。您可以从 DownValues[f][[1]]
RuleDelayed
(:>
) 表达式的左侧梳理参数,并提取它们,但我会把这个细节留给您。