Wolfram mathematica Wolfram Mathematica函数使用的变量列表

Wolfram mathematica Wolfram Mathematica函数使用的变量列表,wolfram-mathematica,Wolfram Mathematica,有没有办法获得函数使用的变量列表? 例如: a=1; b=2; f[x_]:=2a*x+b 需要: 函数[f] 输出: {{x},{a,b} 函数({x})的参数实际上不是强制性的 谢谢。要获取所有符号(不一定是变量),您可以从以下内容开始: DownValues[f] 这将产生: {HoldPattern[f[x_]] :> 2 a x + b} Hold[Hold[Hold[2] Hold[a] Hold[x]] + Hold[b]] 然后,问题是以一种不让Mathematica

有没有办法获得函数使用的变量列表? 例如: a=1; b=2; f[x_]:=2a*x+b

需要: 函数[f]

输出: {{x},{a,b}

函数({x})的参数实际上不是强制性的

谢谢。

要获取所有符号(不一定是变量),您可以从以下内容开始:

DownValues[f]
这将产生:

{HoldPattern[f[x_]] :> 2 a x + b}
Hold[Hold[Hold[2] Hold[a] Hold[x]] + Hold[b]]
然后,问题是以一种不让Mathematica进行替换的方式来处理这个问题。这是通过按住
来完成的:

held=(Hold //@ DownValues[f][[1]])[[1, 2]]
这将产生:

{HoldPattern[f[x_]] :> 2 a x + b}
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]
您仍然需要按住
键,因为一旦丢失它,Mathematica将计算
a
b
,并且它们将作为符号丢失

如果您注意到,它正在考虑
x
一个符号,您可能不想要它,因为它是一个参数。您可以从
DownValues[f][[1]]
RuleDelayed
:>
)表达式的左侧挑出参数并提取它们,但我将把这个细节留给您